zoukankan      html  css  js  c++  java
  • UVA 455

    最近好像很喜欢用set容器,觉得字符串的判是否重复这样的题目,用这个很棒,455这道题就是找循环节。我的思路是如果  s[i]==s[0]&&len%i==0

    这个条件说明i可能是循环节。然后对于以后的字符串就截取i个,所以就会把字符串s截成len/i段。加入到set容器里,会出现3种情况:

    1) size()==1 ,这说明在截取字符串的时候一直没有字符串往里加,就是set里面的元素就是循环节,输出它的长度即可

    2) size()!=1,这说明有不同于循环节的字符往里面加了。所以这是应该break程序。

    3)size()==0  ,这说明没有循环节往里加,说明字符串是不循环的,输出字符串的长度即可。

    #include <iostream>
    #include<stdio.h>
    #include<stdlib.h>
    #include<string>
    #include<string.h>
    #include<set>
    using namespace std;
    int main()
    {
      int n;
      scanf("%d",&n);
      set<string> se;
      string s,f;
      while(n--){
        se.clear();
        cin>>s;
        int len=s.length();
        for(int i=1;i<len;i++){
                se.clear();
            if(s[i]==s[0]&&len%i==0){
                    se.insert(s.substr(0,i));
                    for(int j=i;j<len;j+=i){
                    f=s.substr(j,i);
                    if(!se.count(f)){
                        se.insert(f);
                        break;
                    }
    
                    }
    
            }
             if(se.size()==1){
                set<string>::iterator it=se.begin();
                f=*it;
                cout<<f.length()<<endl;
                break;
            }
        }
        if(se.size()==0){
            cout<<len<<endl;
        }
        if(n)
            cout<<endl;
    
      }
       return 0;
    }
  • 相关阅读:
    巩固复习(对以前的随笔总结)_01
    Django 项目分析后得到的某些结论
    django 命令行命令
    实现搜索视频到播放(非原创)
    python 打包
    随笔汇总,温故知新
    找伙伴
    sam-Toy Cars
    反质数
    Blue Mary的战役地图
  • 原文地址:https://www.cnblogs.com/wintersong/p/5067156.html
Copyright © 2011-2022 走看看