• TC SRM 607 DIV2


    求拼接完成后的字符串包含的子回文串的数目,一开始还用暴力去做,想都不用想 肯定超时了。

    复习了一下求最长子回文串的算法,发现可以类似解决。

    给相邻字符之间添加一个‘@’字符,这样所有的回文串都是奇数长度,然后从左到右,统计以每个字符为中心的回文串的数目就行了,长度逐渐递增,一旦遇到不是回文串的情况,就马上结束,开始对下一个字符为中心的回文串的统计。

    Orz…这个回文串算法不久前学过,最近搞前面基础去了就忘得差不多了,还是太弱了,继续好好努力,先打好基础,同时学点新东西,我就不相信,acm这东西花时间是搞不好的。

    代码:

    int count(vector <string> S1, vector <string> S2){
          string tempstr = "", str = "";
          int n1= S1.size(), n2 = S2.size();
          REP(i, n1)
          tempstr+= S1[i];
          REP(i, n2)
          tempstr+= S2[i];
          int ans = 0;
          int len = tempstr.size();
          str += '@';
          REP(i, len)
           {
                str += tempstr[i];
                str += '@';
           }
           cout<<str<<' '<<str.size()<<endl;
          len = 2*len+1;
          REP(i, len) REP(k, inf){
           if(!(i + k < len && i - k >= 0))
                 break;
             if(str[i+k] == str[i-k])
                ans += (str[i+k]!='@');
             else break;
            
          }
          return ans;
          }
  • 相关阅读:
    MySQL(错误1064)
    如何判断是手机还是电脑访问网站
    Oracle表分区
    分离Date数据
    多对多
    一对多
    SQLalchemy基础
    paramiko上传下载
    paramiko
    automap
  • 原文地址:https://www.cnblogs.com/rootial/p/3539626.html
Copyright © 2020-2023  润新知