中级光能
3990 最长回文字符串经验值:1200
题目描述 Description
现在给出一个字符串,如果该字符串顺着和倒着是完全一样的,即字符串开头与结尾相对位置的字符对应都相同,那么该字符串是完全回文字符串,否则的话我们也可以求出其最长回文长度。
最长回文长度指的是开头和结尾有多少对字符对应匹配(不区分大小写)。
比如:
aSIA 的最长回文长度是1,因为开头和结尾只有1对字符a和A匹配。
AbscBA 的最长回文长度是2,因为有2对字符:A和A,b和B对应匹配。
现在输入一个字符串,请你判断:如果它是完全回文字符串,输出“Y”;否则输出“N”以及该字符串的最长回文长度。
输入描述 Input Description
第一行,输入一个字符串(仅包含字母)
输出描述 Output Description
如果是完全回文字符串,输出“Y”;否则输出“N”和该字符串的最长回文长度
样例输入 Sample Input
【样例输入1】 IasSAI 【样例输入2】 IIAsii
样例输出 Sample Output
【样例输出1】 Y 【样例输出2】 N 2
WA惨拿30分:
- #include<iostream>
- using namespace std;
- string s;
- int cnt;
- int main(){
- getline(cin,s);
- for(int i=0;i<s.size();i++){
- if(s[i]>='A'&&s[i]<='Z'){
- s[i]+=32;
- }
- }
- int l=0,r=s.size()-1;
- int maxx=0;
- while(l<=r){
- if(s[l]==s[r]){
- cnt++;
- l++;
- r--;
- }
- else{
- l++;
- r--;
- cnt=0;
- }
- if(maxx<cnt){
- maxx=cnt;
- }
- }
- if(maxx==s.size()/2){
- cout<<"T";
- }
- else{
- cout<<"N"<<" "<<maxx;
- }
- return 0;
- }
新手守护
你好,胡景波
你的代码大致没有问题,只存在两个小错误:
1.输出错了:
是输出“Y”,不是输出“T”
2.要加break;
要在“cnt=0;”后面加break;
如图:
- else{
- l++;
- r--;
- cnt=0;
- break;
- }
———————————————————————————————————————————————————————
然后你就AC了。
求采纳
资深守护
char str[100]; int len = 0; bool flag = true; cout << "请任意输入一串字符" << endl; int i = 0; str[i] = getchar(); while (str[i] != '\n') { i++; str[i] = getchar(); } len = i - 1; for (int j = 0; j < (len / 2); j++) { if (str[j] != str[len - j]) { flag = false; break; } } if (false == flag) { cout << "不是回文" << endl; } else { cout << "是回文" << endl; } system("pause");
资深守护
cnt++放在外面
乔俊驰在2020-10-28 21:28:44追加了内容
而且只需要用双指针就行,判断a[i]!=a[j] 然后return 0;
否则 i++ j-- cnt++
乔俊驰在2020-10-28 21:29:15追加了内容
用函数写