文章
74
粉丝
0
获赞
94
访问
8.2k
中心扩展法:
回文串的长度都是奇数,我们称其为奇回文串, 例如 bcb。
回文串的长度都是偶数,我们称其为偶回文串, 例如 bccb。
比如子串 abccba,我们可以从头遍历每个字母,若是奇回文串,则将其视作中心点,若是偶回文串,则将其与其后面一位视为中心,向外扩散并判断是否对称:
cc 是回文串。
看看 cc 左右两边的字母是不是一样的,一样,那么 bccb 是回文串。
继续,看看 bccb 左右两边的字母是不是一样的,一样,那么 abccba 是回文串。
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;
while(cin >> s){
int len = s.size();
int ans_left = 0, ans_right = 0; // 最长回文串的左下标和右下标
// 奇回文串
for(int i = 0; i < len; i ++){
int l = i, r = i;
while(l >= 0 && r < len && s[l] == s[r]){
l --;
r ++;
}
// l + 1 和 r - 1才是正确下标
if(r - l - 1 > ans_right- ans_left + 1){
ans_left = l + 1;
ans_right = r - 1;
}
}
// 偶回文串
for(int i = 0; i < len - 1; i ++){
int l = i, r = i + 1;
...
登录后发布评论
暂无评论,来抢沙发