问题标题: 酷町堂:3990 最长回文字符串

0
0
已解决
胡景波
胡景波
中级光能
中级光能

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;
  • }

0
已采纳
李宏浩
李宏浩
新手守护
新手守护

你好,胡景波

你的代码大致没有问题,只存在两个小错误: 

1.输出错了:

是输出“Y”,不是输出“T”

2.要加break;

要在“cnt=0;”后面加break;

如图:

  • else{
  • l++;
  • r--;
  • cnt=0;
  • break;
  • }

———————————————————————————————————————————————————————

然后你就AC了。

求采纳

0
蒋文瀚
蒋文瀚
新手光能
新手光能

指针,cnt,每相同一次cnt就++,如果不相同,输出cnt,如果回文,输出Y

0
杜文博
杜文博
资深守护
资深守护

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");

0
乔俊驰
乔俊驰
资深守护
资深守护

cnt++放在外面

乔俊驰在2020-10-28 21:28:44追加了内容

而且只需要用双指针就行,判断a[i]!=a[j]  然后return 0;

否则 i++ j-- cnt++

乔俊驰在2020-10-28 21:29:15追加了内容

用函数写

0
荣逸乐
荣逸乐
资深守护
资深守护
全局变量cnt;
judge函数(string x){
    int i=0,j=x.size()-1;
    while(i<=j){
        if(x[i]!=x[j]) return false;
        i++,j--,cnt++;
    }
    return true;
}

主函数:

定义;
输入;
for(int i=0;i<s.size();i++){
    if(s[i]>='A'&&s[i]<='Z') s[i]+=32;
}
if(judge(s)) cout<<"Y";
else cout<<"N "<<cnt;

 

我要回答