summaryrefslogtreecommitdiff
path: root/src/bin/p0005.rs
diff options
context:
space:
mode:
authorMistivia <i@mistivia.com>2025-08-13 14:50:57 +0800
committerMistivia <i@mistivia.com>2025-08-13 14:50:57 +0800
commitb69d114579fd5c25d4065229c812a83cd26cd583 (patch)
tree72e8d12a8d0f1a568b6c2b5d6d0b667f7cfdd795 /src/bin/p0005.rs
parent63e5f78e0754ba36347f3576ce3b12aa7e474073 (diff)
refactor p5
Diffstat (limited to 'src/bin/p0005.rs')
-rw-r--r--src/bin/p0005.rs26
1 files changed, 17 insertions, 9 deletions
diff --git a/src/bin/p0005.rs b/src/bin/p0005.rs
index ce4d5e4..01b368d 100644
--- a/src/bin/p0005.rs
+++ b/src/bin/p0005.rs
@@ -1,5 +1,5 @@
impl Solution {
- pub fn check_palindrome_len(s: &String, i: i32) -> (i32, i32, i32) {
+ fn check_odd(s: &String, i: i32) -> (i32, i32, i32) {
let mut r = 0;
loop {
let next = r + 1;
@@ -10,11 +10,14 @@ impl Solution {
}
r = next;
}
- let len1 = 2 * r + 1;
- let start1 = i - r;
- let end1 = i + r;
+ let len = 2 * r + 1;
+ let start = i - r;
+ let end = i + r;
+ (len, start, end)
+ }
- r = 0;
+ fn check_even(s: &String, i: i32) -> (i32, i32, i32) {
+ let mut r = 0;
loop {
let next = r + 1;
if i - next + 1 < 0
@@ -24,10 +27,15 @@ impl Solution {
}
r = next;
}
- let len2 = 2 * r;
- let start2 = i - r + 1;
- let end2 = i + r;
+ 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 {
@@ -56,4 +64,4 @@ struct Solution {}
fn main () {
println!("{}", Solution::longest_palindrome("babad".to_string()));
println!("{}", Solution::longest_palindrome("cbbd".to_string()));
-} \ No newline at end of file
+}