• 最长回文子串---Manacher算法


    百度:Manacher算法

    代码

    #include <iostream>
    #include <string>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    
    int MANACHER(const string &str)
    {
        string data;
        int len = str.length();
        data+="$#";
        for (int i=0;i<len;i++)
        {
            data+=str[i];
            data+='#';
        }
        data+='@';
        //到此预处理完成
        len = data.length();
        int *temp = new int[len+2];
        memset(temp,0,sizeof(temp));
        int MaxIndex=0;
        int i=1,index=0,res=0;
        
        for(;i<len;i++)
        {
            if (MaxIndex>i)
            {
                temp[i]=(MaxIndex-i<temp[2*index-i]?MaxIndex-i:temp[2*index-i]);
            }
            else
                temp[i]=1;
    
            while (data[i-temp[i]] == data[i+temp[i]])
            {
                temp[i]++;
            }
            if(i+temp[i] > MaxIndex)
            {
                MaxIndex = i+temp[i];
                index=i;
                
            }
            res = (res>temp[i]?res:temp[i]);
            
            
        }
    
        delete[]temp;
        return res-1;
    
    }
    
    int main()
    {
        string str ;
        int n;
        while(cin >> n)
        {
            while (n--)
            {
                cin >> str;
                
                cout << MANACHER(str)<<endl;
            }
        }
        
        return 0;
    }
  • 相关阅读:
    django orm(2)
    django orm操作(1)
    Django 模型层(2)
    Django 模型层(1)
    6 Django的视图层
    Django的模板层
    可视化工具Navicat的使用
    adminlte html汉化
    nodejs安装package
    jquery验证框架validate的使用
  • 原文地址:https://www.cnblogs.com/LCCRNblog/p/5836845.html
Copyright © 2020-2023  润新知