zoukankan      html  css  js  c++  java
  • UVA 11475 Extend to Palindrome(hash)题解

    题意:问你最少加几个字母使所给串变成回文串。

    思路:一开始打算将正序和逆序都hash,然后用提取前缀后缀的方法来找,但是RE了,debug失败遂弃之。后来发现可以直接hash,一边hash一边比较。我们只需找出正序hash值和逆序hash相同的最长串就是最长回文子串。

    代码:

    #include<stack>
    #include<vector>
    #include<queue>
    #include<set>
    #include<cstring>
    #include<string>
    #include<sstream>
    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<algorithm>
    #define ll long long
    #define ull unsigned long long
    using namespace std;
    const int maxn = 200000+10;
    const int seed = 131;
    const int MOD = 100013;
    const int INF = 0x3f3f3f3f;
    char s[maxn];
    int main(){
        while(scanf("%s", s + 1) != EOF){
            int len = strlen(s + 1);
            ull suf = 0,pre = 0,bit = 1,Max = 1;
            for(int i = len; i >= 1; i--){
                pre = pre * seed + s[i];    //倒序前缀
                if(i != len) bit *= seed;
                suf = suf + bit * s[i];   //正序后缀
                if(pre == suf){
                    Max = len - i + 1;
                }
            }
            for(int i = 1; i <= len; i++)
                printf("%c", s[i]);
            for(int i = len - Max; i >= 1; i--)
                printf("%c", s[i]);
            printf("
    ");
        }
        return 0;
    }
    /*
    aaaa
    abba
    amanaplanacanal
    xyz
    */
  • 相关阅读:
    python 使用else代替状态变量
    python 实现线程安全的单例模式
    sql语句的执行顺序
    python 实现int函数
    python实现时间o(1)的最小栈
    python实现简单的负载均衡
    python实现求最长回文子串长度
    python lambda表达式
    sql针对某一字段去重,并且保留其他字段
    基本认识
  • 原文地址:https://www.cnblogs.com/KirinSB/p/9523603.html
Copyright © 2011-2022 走看看