PAT甲级1040

1040 Longest Symmetric String (25 分)

Given a string, you are supposed to output the length of the longest symmetric sub-string. For example, given Is PAT&TAP symmetric?, the longest symmetric sub-string is s PAT&TAP s, hence you must output 11.

Input Specification:

Each input file contains one test case which gives a non-empty string of length no more than 1000.

Output Specification:

For each test case, simply print the maximum length in a line.

Sample Input:

Is PAT&TAP symmetric?

Sample Output:

11
#include<bits/stdc++.h>
using namespace std;

const int Max = 1010;

int main(){
	string str;
	getline(cin, str);
	int dp[Max][Max];
	fill(dp[0], dp[0] + Max * Max, 0);
	int len = str.size(), ans = 1;
	for(int i = 0; i < len; i++){
		dp[i][i] = 1;
		if(i + 1 < len && str[i] == str[i + 1]){
			dp[i][i + 1] = 1;
			ans = 2;
		}
	}
	for(int l = 3; l <= len; l++){
		for(int i = 0; i + l -1 < len; i++){
			int j = i + l - 1;
			if(str[i] == str[j] && dp[i + 1][j - 1] == 1){
				ans = l;
				dp[i][j] = 1;
			}
		}
	}
	printf("%d", ans);
	return 0;
}
发布了116 篇原创文章 · 获赞 7 · 访问量 6023

猜你喜欢

转载自blog.csdn.net/qq_40204582/article/details/87004115