add initial data
This commit is contained in:
1 parent
048a82b101
commit
51d935d06b
66 files changed
+1329
No files matched your search
@@ -0,0 +1,64 @@
|
||||
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());
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user