0081デフォルトの名無しさん
2023/08/27(日) 01:14:16.06ID:xDzSjAxcこうすると計算量を減少できる
fn len_of_eq(s: &str, index: usize, even: usize) -> usize {
let mut len = 0;
for (p, q) in std::iter::zip(s[(index + even)..].chars(), s[0..=index].chars().rev()) {
if p != q {
break;
}
len += 1;
}
return len;
}
fn print_kaibun(s: &str) {
for index in 0..s.len() {
for even in 0..=1 {
for len in 1..=len_of_eq(s, index, even) {
let first = index + 1 - len;
let last = index + len - 1 + even;
println!("{first}~{last}: {}", &s[first..=last]);
}
}
}
}
fn main() {
print_kaibun("ABCBAXYZZYX");
}