• 最长回文子串


    首先解决“判断时忽略标点,输出进却要按原样”的问题?

    可以用一个简单的方法:构造一个新字符串,不包含原来的标点符号,而且所有字符变成小写(顺便解决了大小写的问题)。

    由于在求最大值时,不知道s[i]和s[j]在原串中的位置。因此,必须增加一个数组pos,用pos[i]保存s[i]在原串中的位置。

    const int N=5010;
    bool f[N][N];
    string a,b;
    int pos[N],cnt;
    
    bool check(char c)
    {
        if(isdigit(c)) return true;
        if(islower(c)) return true;
        if(isupper(c)) return true;
        return false;
    }
    
    int main()
    {
        getline(cin,a);
    
        for(int i=0;i<a.size();i++)
        {
            if(check(a[i]))
            {
                if(isupper(a[i])) b+=tolower(a[i]);
                else b+=a[i];
                pos[cnt]=i;
                cnt++;
            }
        }
    
        int l=0,r=0;
        for(int i=cnt-1;i>=0;i--)
            for(int j=i;j<cnt;j++)
            {
                if(i == j) f[i][j]=true;
                else if(i+1 == j) f[i][j]=(b[i] == b[j]);
                else f[i][j]=f[i+1][j-1] && (b[i] == b[j]);
    
                if(f[i][j] && j-i+1 > r-l+1) l=i,r=j;
            }
    
        int len=pos[r]-pos[l]+1;
        cout<<a.substr(pos[l],len)<<endl;
    
        //system("pause");
        return 0;
    }
    
  • 相关阅读:
    文件路径总结
    git本地仓库关联远程仓库
    webpack-dev-server版本
    box-sizing重置
    事件委托优缺点和实现
    移动端经验总结(持续更新)
    点击其他区域关闭dialog
    css3图片变灰
    安装 ubuntu 后,使用 sed 更换国内源
    在virtualBox中打开vdi(转载)
  • 原文地址:https://www.cnblogs.com/fxh0707/p/14363836.html
Copyright © 2020-2023  润新知