[编程题]循环单词计数

来源:互联网 发布:伊斯兰教 邪教 知乎 编辑:程序博客网 时间:2024/04/29 06:35

题目来源:牛客网

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

#include<iostream>#include<string>#include<set>#include<vector>#include<map>using namespace std;void rotates(string &str){    char a = str[0];    str.erase(str.begin());    str = str + a;}int main(){    int num;    string cur;    multimap<int, set<string>>group;    cin >> num;    for (int i = 0; i < num; i++)    {        cin >> cur;        int size = cur.size();        auto subgroup = group.find(size);        bool isFind = false;        while (subgroup != group.end())        {            set<string>curgroup = subgroup->second;            if (curgroup.find(cur) != curgroup.end())            {                isFind = true;                break;            }            else            {                subgroup++;            }        }        if (!isFind)        {            set<string>newgroup;            string rotatestr(cur);            //int i = size;            do{                newgroup.insert(rotatestr);                rotates(rotatestr);                //rotate(rotatestr.begin(), rotatestr.begin() + 1, rotatestr.end());            } while (rotatestr != cur);            //} while (i)            pair<const int, set<string>> newpair(size, newgroup);            group.insert(newpair);        }    }    cout << group.size();    cin.get();    cin.get();    return 0;}
0 0