1. 程式人生 > >1347 旋轉字符串

1347 旋轉字符串

names 得到 如果能 name 輸出 problem int put tput

1347 旋轉字符串 基準時間限制:1 秒 空間限制:131072 KB 分值: 5 難度:1級算法題 S[0...n-1]是一個長度為n的字符串,定義旋轉函數Left(S)=S[1…n-1]+S[0].比如S=”abcd”,Left(S)=”bcda”.一個串是對串當且僅當這個串長度為偶數,前半段和後半段一樣。比如”abcabc”是對串,”aabbcc”則不是。

現在問題是給定一個字符串,判斷他是否可以由一個對串旋轉任意次得到。

Input
第1行:給出一個字符串(字符串非空串,只包含小寫字母,長度不超過1000000)
Output
對於每個測試用例,輸出結果占一行,如果能,輸出YES,否則輸出NO。
Input示例
aa
ab
Output示例
YES
NO
題目鏈接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1347 分析:此題啊!超時啊。。。。一定要降低復雜度,之前寫的復雜度為O(n^2),降低復雜度後,為O(n/2); 下面給出AC代碼: 技術分享
 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int main()
 4 {
 5     char s[1000005];
 6     while(gets(s))
 7     {
 8         int count=1;
 9         int len=strlen(s);
10         int t=len/2;
11         if(len%2!=0)
12             printf("NO\n");
13             else
14             {
15             for(int i=0;i<len/2;i++)
16             {
17                 if(s[i]!=s[i+t])
18                     {
19                         count=0;
20                         break;
21                     }
22             }
23             if(count)
24                 printf("YES\n");
25             else printf("NO\n");
26             }
27     }
28     return 0;
29 }
技術分享

1347 旋轉字符串