zoukankan      html  css  js  c++  java
  • Codeforces Global Round 7 D1. Prefix-Suffix Palindrome (Easy version)(字符串细微处理)

    题意:

      取一字符串不相交的前缀和后缀(可为空)构成最长回文串。

    思路:

      先从两边取对称的前后缀,之后再取余下字符串较长的回文前缀或后缀。

    讲解:

      这道题主要是需要考虑的情况太多,比如说只有一个字符的情况下我是用if来判断输出还是用以下这种解法

      这个解法的巧妙之处就是在于不用考虑是几个字符,因为在输出1个字符的时候l,r和仍然在以前的位置不会改变,第一个输出时候就是cout<<s.substr(0,0)就什么都不会输出,末尾的话就是比r还大1更不会输出了,但是最好注意string定义的位置,使string每次用的时候都是新的,因为自己还不清楚string定义完后需要在什么情况下清空所以最好每次都情况。

      当只有一个字母的时候会输出最后一个字符

    #include<bits/stdc++.h>
    #define INF 0x3f3f3f3f
    #define DOF 0x7f7f7f7f
    #define mem(a,b) memset(a,b,sizeof(a))
    #define IO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    typedef long long ll;
    using namespace std;
    bool ok(const string s,int l,int r)
    {
        while(l<=r&&s[l]==s[r]) ++l,--r;
        return l>r;
    }
    int main()
    {
        int t;cin>>t;
        while(t--)
        {
            string s;
            cin>>s;
            int len=s.size()-1;
            int l=0,r=len;
            while(l<r&&s[l]==s[r]) ++l,--r;
            int l2,r2;
            for(r2=r;r2>=l;--r2)
            {
                if(ok(s,l,r2)) break;
            }
            for(l2=l;l2<=r;++l2) if(ok(s,l2,r)) break;
            cout<<s.substr(0,l)
                <<((r2-l>r-l2)?s.substr(l,r2-l+1):s.substr(l2,r-l2+1))
                <<s.substr(r+1)<<endl;
        }
    }

     参考博客:https://www.cnblogs.com/Kanoon/p/12528997.html

  • 相关阅读:
    Redis实现分布式锁
    Redis数据结构
    Mysql与redis缓存一致性
    mysql分库分表
    mysql主从同步
    mysql配置优化
    Netty 参数优化
    JAVA多线程之park & unpack
    网络时钟服务器(网络校时服务器)无法同步的排查方法
    GPS北斗共视授时中的多径效应分析
  • 原文地址:https://www.cnblogs.com/waryan/p/12614936.html
Copyright © 2011-2022 走看看