题目要求:
对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定Is PAT&TAP symmetric?,最长对称子串为s PAT&TAP
s,于是你应该输出11。
输入格式:
输入在一行中给出长度不超过1000的非空字符串。
输出格式:
在一行中输出最长对称子串的长度。
输入样例:
Is PAT&TAP symmetric?
输出样例:
11
这道题,并没有多难。只要仔细想一想有了思路就不难。我的想法是分为偶数和奇数。比如123321,的最长对称子串长度为6;1234321,的最长对称子串长度为7.
有了这个思路,就靠递归,就好了。
代码如下:
#include<iostream>
#include<string>
using namespace std;
int size1;
bool Find(string str,int x,int y){//偶
if(x < 0 || y > str.length()-1)return false;
if(str[x] == str[y]){
size1 += 2;
Find(str,x-1,y+1);
}else{
return false;
}
return true;
}
int size2 = 1;
bool Find2(string str,int x,int y){//奇
if(x < 0 || y > str.length()-1) return false;
if (str[x] == str[y]){
size2 += 2;
Find2(str,x-1,y+1);
}else{
return false;
}
}
int main(){
string str;
getline(cin,str);
if(str.length() == 1){
cout<<1<<endl;
return 0;
}
int max1 = -1;
for(int i=0;i<str.length();i++){
size1 = 0;
Find(str,i,i+1);
max1 = max(max1,size1);
}
int max2 = -1;
for(int i=1;i<str.length()-1;i++){
size2 = 1;
Find2(str,i-1,i+1);
max2 = max(max2,size2);
}
cout<<max(max1,max2)<<endl;
return 0;
}
我对字符串进行了两次遍历,第一次是把它的结果看作是偶数,进入Find()函数;第二次是看做奇数结果,进入Find2()函数。最后取大值。还有一点就是:只输入一个字符时,它的结果是1,这点要单独考虑。
QwQ这几天没有什么可以让我写博客的题,要不太难太复杂,我自己都得看着别人的代码一句一句的思考。要不就是太简单,没有技术含量。ennn还是得坚持每两天更博。
一个集坚强与自信于一身的菇凉。