Skip to content

Instantly share code, notes, and snippets.

@mykhailokrainik
Last active October 19, 2022 05:08
Show Gist options
  • Save mykhailokrainik/cf89ecd182f11b7165c7823e244e7601 to your computer and use it in GitHub Desktop.
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/
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