最长对称子串(o(n^2))

对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定Is PAT&TAP symmetric?,最长对称子串为s PAT&TAP s,于是你应该输出11。

输入格式:

输入在一行中给出长度不超过1000的非空字符串。

输出格式:

在一行中输出最长对称子串的长度。

输入样例:

Is PAT&TAP symmetric?

输出样例:

11

思路:遍历以这个字符串的每个字符为对称轴的每个对称子串(这些即为所有对称子串),找其中的最大长度即为最后答案。

遍历方法:用两个指针从最靠近对称轴的位置往两边扩展,每次判断对应位置的两个字符是否相等即可

完整代码:

 

#include 
#define int long long
using namespace std;
string s;

int maxL(bool type,int pos)
{
    int len=1,start=pos-1,ed=pos+1;//默认type=false为长度为奇数的情况,此时最长对称子串至少为当前对称轴位置的这一个字符,所以len=1,起点=pos-1,终点=po+1
    if(type){
        len=0,start=pos;//type=true时,对称子串长度为偶数,所以len初始值为0(对称轴位置无字符),对称子串起点=pos,终点还是pos+1
    }
    while(start>=0&&ed

 

你可能感兴趣的:(最长对称子串(o(n^2)))