diff options
Diffstat (limited to 'rust/src/bin/p0005.rs')
| -rw-r--r-- | rust/src/bin/p0005.rs | 67 |
1 files changed, 0 insertions, 67 deletions
diff --git a/rust/src/bin/p0005.rs b/rust/src/bin/p0005.rs deleted file mode 100644 index 01b368d..0000000 --- a/rust/src/bin/p0005.rs +++ /dev/null @@ -1,67 +0,0 @@ -impl Solution { - fn check_odd(s: &String, i: i32) -> (i32, i32, i32) { - let mut r = 0; - loop { - let next = r + 1; - if i - next < 0 - || i + next >= s.len() as i32 - || s.as_bytes()[(i-next) as usize] != s.as_bytes()[(i+next) as usize] { - break; - } - r = next; - } - let len = 2 * r + 1; - let start = i - r; - let end = i + r; - (len, start, end) - } - - fn check_even(s: &String, i: i32) -> (i32, i32, i32) { - let mut r = 0; - loop { - let next = r + 1; - if i - next + 1 < 0 - || i + next >= s.len() as i32 - || s.as_bytes()[(i-next+1) as usize] != s.as_bytes()[(i+next) as usize] { - break; - } - r = next; - } - let len = 2 * r; - let start = i - r + 1; - let end = i + r; - (len, start, end) - } - - fn check_palindrome_len(s: &String, i: i32) -> (i32, i32, i32) { - let (len1, start1, end1) = Self::check_odd(s, i); - let (len2, start2, end2) = Self::check_even(s, i); - if len2 > len1 { - (len2, start2, end2) - } else { - (len1, start1, end1) - } - } - - pub fn longest_palindrome(s: String) -> String { - let mut maxpalinlen = -1; - let mut start: i32 = 0; - let mut end: i32 = 0; - for i in 0..s.len() { - let (palin_len, pstart, pend) = Self::check_palindrome_len(&s, i as i32); - if palin_len > maxpalinlen { - maxpalinlen = palin_len; - start = pstart; - end = pend; - } - } - s[start as usize ..(end + 1) as usize].to_string() - } -} - -struct Solution {} - -fn main () { - println!("{}", Solution::longest_palindrome("babad".to_string())); - println!("{}", Solution::longest_palindrome("cbbd".to_string())); -} |
