UVA455 - Periodic Strings
原題鏈接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=830&page=show_problem&problem=396
題意:? 如果一個字符串可以由某個長度為k的字符串重復多次得到,則稱該串以k為周期。例
?????????? 如,abcabcabcabc以3為周期(注意,它也以6和12為周期)。
??????????? 輸入一個長度不超過80的字符串,輸出其最小周期。
解題思路過程:
??????????? 首先,我想到的是用隊列
?????????????? 把待測串s[]的首字符s[0]入隊,從第二個字符s[1]開始和隊首元素對比,
????????????????????? if(s[i]==c.pop())(c為隊列)隊首出隊;sum++;
????????????????????? else c.push(s[i])
????????????? 一直到隊列為空or所有元素都遍歷過一遍為止。
????????????? 最后如果sum==0 || 串的長度與sum取模!=0 就說明它的最短周期是它本身
?
1 #include <iostream> 2 #include<string> 3 #include<queue> 4 using namespace std; 5 int main(){ 6 int T; 7 cin>>T; 8 while(T){ 9 string a; 10 cin>>a; 11 int len=a.length(); 12 int lena=len; 13 len--; 14 queue<char>c; 15 c.push(a[0]); 16 int i=1,sum=0; 17 while(!c.empty()&&len){ 18 char temp=c.front(); 19 if(temp==a[i]){ 20 c.pop();sum++; 21 } 22 else c.push(a[i]); 23 i++;len--; 24 } 25 // if(sum==1)sum=lena; 26 if(sum==0)sum=lena; 27 else if((lena%sum)!=0)sum=lena; 28 cout<<sum<<endl; 29 T--; 30 } 31 return 0; 32 }后來測試才發現,這算法有個致命的bug!!!
“算法盲點”:amanamanamanaman
按此串所模式,最小周期應該是4,但因為使用隊列的緣故,無法實現出現隊列為空的情況顧,此路不通。。。
?
經過重新觀察數據規模,發現和題意,發現通過枚舉完成此題。
首先從1開始枚舉子串長度,如果待測串%子串長度==0就可以接著去對照待測串中的元素最終找出待測串的最小周期
轉載于:https://www.cnblogs.com/yifeianyi/p/6900118.html
總結
以上是生活随笔為你收集整理的UVA455 - Periodic Strings的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: Python高级用法总结
- 下一篇: C语言表上作业法运输问题,论运输问题表上
