zoukankan      html  css  js  c++  java
  • unexpected problem

    一个比较有趣的字符串问题,问题描述如下

    大体意思就是给定一个字符串s以及一个整数m,找出一个能满足以上三个条件的字符串t的个数对10e9 + 7 取余输出。

    第二三条是关键,t.s = s.t 举个例子 s = abab, t的话可以是ab。那么 t.s = ab(t)abab(s),s.t = abab(s)ab(t)。

    t的长度要小于m。

    例子:

    一种大体思路就是判断s是否为由循环子字符构成的字符串,如abababab为子字符串ab循环构成的字符串。 如果是循环串,则找出子串的长度(len),如果不是则取s的长度(len)。 则(m/len)%10e9 + 7 即为所求。

    一种判断是否为循环串的方法:

    1.对s的长度进行因子分解

    2.依次对因子进行遍历,按照因子长度对s进行截取,如果各子串都相同则记录因子跳出遍历,所找出的字符串即为所需。

    #include <iostream>
    #include <cstring>
    #include <vector>
    #include <cmath>
    #include <cstdio>
    
    using namespace std;
    
    int main(){
        string s,preStr;
        cin>>s;
        int len = s.length();
        vector<int> idx;
        vector<string> sub;
        //bool flag = true;
        for(int i = 1 ; i < len ; i++){
            if(len%i==0)
              idx.push_back(i);
        }
        int sz = idx.size();
        for(int i = 0; i < sz ; i++){
            int step = idx[i];
            preStr = s.substr(0,step);
            bool flag = true;
            for(int j = step; j < len/step ; j++){
                if(s.substr(idx[i]*j, idx[i]) != preStr)
                {
                    flag = false;
                    break;
                }
            }
            if(flag == true)
               break;
        }
        
        cout<<preStr.length()<<endl;
    
    }

    以上为找字符串串长度代码,可根据题目稍作修改即可。

     leaderboard上面一个比较简洁的代码,基本思想相同。

    
    

    #include <cmath>
    #include <cstdio>
    #include <vector>
    #include <iostream>
    #include <algorithm>


    using namespace std;


    int
    main() { string s; long m; cin >> s >> m; for (int i = 1; i <= s.size(); i++) { if (s.size() % i != 0) continue; int j; for (j = i; j < s.size(); j++) { if (s[j] != s[j%i]) break; } if (j == s.size()) { cout << (m/i % (long)(1e9+7)) << endl; break; } } return 0; }
  • 相关阅读:
    【ST】lab01——Junit and Eclemma
    【SPM】hw1——个人房间装修
    【ST】hw2——find the error in the follow case
    【ST】Describe an error from my past projects
    ST homework4 --- 图覆盖
    ST lab1——Junit和覆盖测试的初探
    ST work12——failure,fault,error
    ST work1——印象最深的一个bug DJI 激活时报 SDK_ACTIVE_SDK_VERSION_ERROR
    C# note 06——delegate 和 event
    C# note 05——异常处理
  • 原文地址:https://www.cnblogs.com/klitech/p/5888314.html
Copyright © 2011-2022 走看看