为什么用string就wa两个点了,改成char数组就ac了?
查看原帖
为什么用string就wa两个点了,改成char数组就ac了?
828573
CurryNo_1楼主2023/3/31 19:51
#include<iostream>
#include<cstring>
using namespace std;
string s,tmp;
char str[200005];
int pos[200005];
int cnt=0;
bool check(int x,int len)//x为回文字符串的起点,len为长度 
{
    if(x+len>cnt)  return 0;//长度超过字母子串的长度则直接返回 
    for(int i=0;i<len/2;i++)
    {
        if(str[x+i]!=str[x+len-i-1])//不符合回文字符串的条件返回false 
            return 0;
    }
    return 1;
}
int main()
{
    while(getline(cin,tmp))
	{
		s+=tmp;
		s+="\n";
	}
    int len=s.size();
    for(int i=0;i<len;i++)//str储存该字符串中的字母 
    {
        if(s[i]>='a' && s[i]<='z')
        {
            str[cnt]=s[i];
            pos[cnt]=i;
            cnt++;
        }
        else if(s[i]>='A' && s[i]<='Z')
        {
            str[cnt]=s[i]+32;
            pos[cnt]=i;
            cnt++;
        }
    }
    int maxn=-1,mark=0;
    for(int i=0;i<cnt;i++)//遍历每一个字母 
    {
        for(int j=maxn+1;j<=2010;j++)//枚举回文字符串可能长度 
        {
            if(check(i,j) && j>maxn)//判断是否为回文字符串 
            {
                maxn=j;//maxn储存最大回文字符串的长度 
                mark=i;//mark储存最大回文字符串的起点 
            }
        }
    }
    cout << maxn << endl;
    for(int i=pos[mark];i<=pos[mark+maxn-1];i++)//pos[mark]表示起点 
	    cout << s[i];
    return 0;
}

str改成string就wa两个点了

2023/3/31 19:51
加载中...