循环单词加强版

问题描述

如果一个单词通过循环右移获得的单词,我们称这些单词都为一种循环单词。 例如:picture 和 turepic 就是属于同一种循环单词。 现在给出n个单词,需要统计这个n个单词中有多少种循环单词。

输入描述

输入包括n+1行:
第一行为单词个数n(1 ≤ n ≤ 50)
接下来的n行,每行一个单词word[i],长度length(1 ≤ length ≤ 50)。由小写字母构成

输出描述

输出循环单词的种数

输入例子

5
picture
turepic
icturep
word
ordw

输出例子

2

#include<unordered_set>
#include<string>
#include<iostream>
#include<algorithm>
using namespace std;
string xun(const string &s){
    string res=s;
    res.front()=res.back();
    for(int i=1;i<s.size();i++)
        res[i]=s[i-1];
    return res;
}
int main(void){
    int n,cnt=0;
    cin>>n;
    unordered_set<string>myset;
    while(n--){
        string s;
        cin>>s;
        myset.insert(s);
    }
    for(auto it=myset.begin();it!=myset.end();){
        string tmp=*it;
        for(int i=0;i<tmp.size()-1;i++){
            tmp=xun(tmp);
            if(tmp!=*it&&myset.find(tmp)!=myset.end())
                myset.erase(tmp);
        }
        it=myset.erase(it);
        cnt++;
    }
    cout<<cnt<<endl;
    return 0;
}

 

posted @ 2019-07-23 09:58  YF-1994  阅读(209)  评论(0编辑  收藏  举报