65 lines
2.4 KiB
Rust
65 lines
2.4 KiB
Rust
fn main() {
|
|
println!("Hello, world!");
|
|
}
|
|
|
|
pub fn longest_palindrome(s: String) -> String {
|
|
let mut best = Vec::with_capacity(s.len());
|
|
|
|
let bytes = s.as_bytes();
|
|
|
|
for center in 0..bytes.len() {
|
|
for (mut left_idx, mut right_idx) in [(center, center), (center, center + 1)] {
|
|
expand(bytes, &mut left_idx, &mut right_idx);
|
|
|
|
if right_idx - left_idx > best.len() {
|
|
best = bytes[left_idx..right_idx].into();
|
|
}
|
|
}
|
|
}
|
|
String::from_utf8(best).unwrap()
|
|
}
|
|
|
|
fn expand(bytes: &[u8], left_idx: &mut usize, right_idx: &mut usize) {
|
|
loop {
|
|
if bytes.get(*right_idx).is_none_or(|&r| bytes[*left_idx] != r) {
|
|
*left_idx += 1;
|
|
return;
|
|
}
|
|
match left_idx.checked_sub(1) {
|
|
Some(new_left) => *left_idx = new_left,
|
|
None => {
|
|
*right_idx += 1;
|
|
return;
|
|
}
|
|
}
|
|
*right_idx += 1;
|
|
}
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use crate::longest_palindrome;
|
|
|
|
#[test]
|
|
fn test_1() {
|
|
assert!(
|
|
["aba".to_string(), "bab".to_string()]
|
|
.contains(&longest_palindrome("babad".to_string()))
|
|
);
|
|
}
|
|
#[test]
|
|
fn test_2() {
|
|
assert_eq!(longest_palindrome("cbbd".to_string()), "bb".to_string());
|
|
}
|
|
|
|
#[test]
|
|
fn test_3() {
|
|
assert_eq!(longest_palindrome("whdqcudjpisufnrtsyupwtnnbsvfptrcgvobbjglmpynebblpigaflpbezjvjgbmofejyjssdhbgghgrhzuplbeptpaecfdanhlylgusptlgobkqnulxvnwuzwauewcplnvcwowmbxxnhsdmgxtvbfgnuqdpxennqglgmspbagvmjcmzmbsuacxlqfxjggrwsnbblnnwisvmpwwhomyjylbtedzrptejjsaiqzprnadkjxeqfdpkddmbzokkegtypxaafodjdwirynzurzkjzrkufsokhcdkajwmqvhcbzcnysrbsfxhfvtodqabvbuosxtonbpmgoemcgkudandrioncjigbyizekiakmrfjvezuzddjxqyevyenuebfwugqelxwpirsoyixowcmtgosuggrkdciehktojageynqkazsqxraimeopcsjxcdtzhlbvtlvzytgblwkmbfwmggrkpioeofkrmfdgfwknrbaimhefpzckrzwdvddhdqujffwvtvfyjlimkljrsnnhudyejcrtrwvtsbkxaplchgbikscfcbhovlepdojmqybzhbiionyjxqsmquehkhzdiawfxunguhqhkxqdiiwsbuhosebxrpcstpklukjcsnnzpbylzaoyrmyjatuovmaqiwfdfwyhugbeehdzeozdrvcvghekusiahfxhlzclhbegdnvkzeoafodnqbtanfwixjzirnoaiqamjgkcapeopbzbgtxsjhqurbpbuduqjziznblrhxbydxsmtjdfeepntijqpkuwmqezkhnkwbvwgnkxmkyhlbfuwaslmjzlhocsgtoujabbexvxweigplmlewumcone".to_string()), "wfdfw".to_string());
|
|
}
|
|
|
|
#[test]
|
|
fn test_4() {
|
|
assert_eq!(longest_palindrome("a".to_string()), "a".to_string());
|
|
}
|
|
}
|