您的位置:首页 > 其它

PAT甲级1040. Longest Symmetric String (25)

2017-02-28 18:40 309 查看
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

暴力法:分两种情况 1)最长回文串长度为奇数:以字符串中的所有单个字符串为中心,往两边扩散找最长的;2)最长回文串长度为偶数:以字符串中出现的成对字符串为中心,往两边扩散找最长的。

此题还可以用动态规划法:http://blog.csdn.net/tuzigg123/article/details/47053481

#include <iostream>
using namespace std;
#include <string>

int main(){
string str;
getline(cin,str);//注意事项:有空格要用getline

int maxLen=0;
int currentLen=0;
int j=0;
/*奇数的情况*/
for(int i=0;i<str.length();i++){
currentLen=1;
j=1;
while(i-j>=0&&i+j<str.length()){
if(str[i+j]==str[i-j]) {
currentLen+=2;
j++;
}
else break;
}
if(currentLen>maxLen) maxLen=currentLen;
}
/*偶数的情况*/
for(int i=0;i<str.length()-1;i++){
if(str[i]!=str[i+1]) continue;
currentLen=2;
j=1;
while(i-j>=0&&i+1+j<str.length()){
if(str[i-j]==str[i+1+j]) {
currentLen+=2;
j++;
}
else break;
}
if(currentLen>maxLen) {
maxLen=currentLen;

4000
}
}

cout<<maxLen;

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: