7-10 最长对称子串 (25 分)
训练的时候写不出来这道题,(其实我看到字符串的题就头大)
不过看完题解感觉还好。
分析一下:
我们从起点开始出发,但是要分两种情况。
回文显然存在两种情况:
一种是像 abcdcba ,这样的中间一个对称轴的回文
另一种则是abccbd ,这样的中间对称轴为空气的回文
所以我们在走的过程中。分别向两边扩散,看看能走到多远,再取最大值即可。
但是我不知道为什么int 不行, 非要用 unsigned long long 或者 size_t...
#include#include using namespace std; typedef unsigned long long ULL; int main() { ULL ans = 1; string line; getline(cin, line); int leng = line.size(); for(int i = 0; i < leng; i++) // 以中间空气对称 { ULL l = i, r = i + 1; while(l >= 0 && r <= leng && line[l--] == line[r++]); ans = max(ans, r - l - 3); } for(int i = 1; i < leng; i++) // 以Line[i]为轴对称 { ULL l = i - 1, r = i + 1; while(l >= 0 && r <= leng && line[l--] == line[r++]); ans = max(ans, r - l - 3); } cout << ans << endl; return 0; }