2-7 最长对称子串 (35分)

2-7 最长对称子串 (35分)

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

输入格式:

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

输出格式:

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

输入样例:

Is PAT&TAP symmetric?

输出样例:

11

代码如下:
思路: 从字符串末尾开始往前扫描,找到第一个与左起始点相同的字符,再判断这之间的子串是否对称

#include
using namespace std;
int main(){
	int ans = 1;  
	string str="";
	getline(cin,str);
	for(int i=0;i<str.length();i++){
		for(int j=str.length()-1;j>=i;j--){
			if(str[i]==str[j]){  //从后往前找第一个相同字符
				int l=i,r=j;
				int flag = 1;
				while(l<=r){
					l++,r--;
					if(str[l]!=str[r]){  
						flag = 0;
						break;
					}
				}
				if(flag) ans  = max(ans,j-i+1);
			}
		}
	}
	cout << ans << endl;
	return 0;
} 

你可能感兴趣的:(数据结构,#,暑假算法训练营)