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;
}

相关