Last active
October 19, 2022 05:08
-
-
Save mykhailokrainik/cf89ecd182f11b7165c7823e244e7601 to your computer and use it in GitHub Desktop.
Given a string s, return the longest palindromic substring in s. O(n^2) brute force solution. This is a very slow solution instead use dynamic programming and constructed intersection tables. Here are examples of how to do it optimally https://leetcode.com/problems/longest-palindromic-substring/solutions/127837/longest-palindromic-substring/
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
use std::collections::HashMap; | |
pub fn longest_palindrome(s: String) -> String { | |
let mut poly: HashMap<String, usize> = Default::default(); | |
for i in 0..=s.len() { | |
for j in i..=s.len() { | |
let sc = &s[i..j]; | |
let len = sc.len(); | |
let mid = (len / 2) as usize; | |
let rev = sc[mid..len].chars().rev().collect::<String>(); | |
if len % 2 != 0 && sc[0..=mid] == rev { | |
poly.insert(sc.to_string(), len); | |
} else if sc[0..mid] == rev { | |
poly.insert(sc.to_string(), len); | |
} | |
} | |
} | |
let mut max = ("".to_string(), 0); | |
'sort: for (k, v) in poly { | |
if max.1 < v { | |
max = (k, v); | |
continue 'sort; | |
} | |
} | |
max.0 | |
} | |
fn main() { | |
assert_eq!(longest_palindrome("babad".to_string()), "aba".to_string()); | |
assert_eq!(longest_palindrome("cbbd".to_string()), "bb".to_string()); | |
assert_eq!(longest_palindrome("bc".to_string()), "b".to_string()); | |
assert_eq!(longest_palindrome("b".to_string()), "b".to_string()); | |
assert_eq!(longest_palindrome("mwwfjysbkebpdjyabcfkgprtxpwvhglddhmvaprcvrnuxifcrjpdgnktvmggmguiiquibmtviwjsqwtchkqgxqwljouunurcdtoeygdqmijdympcamawnlzsxucbpqtuwkjfqnzvvvigifyvymfhtppqamlgjozvebygkxawcbwtouaankxsjrteeijpuzbsfsjwxejtfrancoekxgfyangvzjkdskhssdjvkvdskjtiybqgsmpxmghvvicmjxqtxdowkjhmlnfcpbtwvtmjhnzntxyfxyinmqzivxkwigkondghzmbioelmepgfttczskvqfejfiibxjcuyevvpawybcvvxtxycrfbcnpvkzryrqujqaqhoagdmofgdcbhvlwgwmsmhomknbanvntspvvhvccedzzngdywuccxrnzbtchisdwsrfdqpcwknwqvalczznilujdrlevncdsyuhnpmheukottewtkuzhookcsvctsqwwdvfjxifpfsqxpmpwospndozcdbfhselfdltmpujlnhfzjcgnbgprvopxklmlgrlbldzpnkhvhkybpgtzipzotrgzkdrqntnuaqyaplcybqyvidwcfcuxinchretgvfaepmgilbrtxgqoddzyjmmupkjqcypdpfhpkhitfegickfszermqhkwmffdizeoprmnlzbjcwfnqyvmhtdekmfhqwaftlyydirjnojbrieutjhymfpflsfemkqsoewbojwluqdckmzixwxufrdpqnwvwpbavosnvjqxqbosctttxvsbmqpnolfmapywtpfaotzmyjwnd".to_string()), "khvhk".to_string()); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment