編程練習(二)(旋轉字符串)

旋轉字符串

  • 問題描述
    S[0…n-1]是一個長度爲n的字符串,定義旋轉函數Left(S) = S[1…n-1] + S[0]。比如S=“abcd”,Left(S)=“bcda”。一個串是對串當且僅當這個串長度爲偶數,前半段和後半段一樣。比如“abcabc”是對串,“aabbcc”則不是。
    現在問題是給定一個字符串,判斷他是否可以由一個對串旋轉任意次得到。

  • 輸入
    第1行:給出一個字符串(字符串非空串,只包含小寫字母,長度不超過1000000)

  • 輸出
    對於每個測試用例,輸出結果佔一行,如果能,輸出YES,否則輸出NO。

  • 樣例輸入
    abcabc
    abccba

  • 樣例輸出
    YES
    NO

  • 思路解析
    通過gets()函數讀取數據到數組中(注:getchar()函數每次讀一個字符,gets()函數則每次讀一整行)。
    用strlen()函數獲取數組長度,字符串無論如何旋轉,初始非對串永遠都不會是對串,反之亦然,且對串中任一字符有且僅有一個字符與之對應
    因此通過數組長度進行前後比較,設置兩個變量,從字符串開始與中間部位依次進行比較,每組字符都完全相等,纔可能是對串。
    該題中已註明只有偶數串纔可能爲對串,因此奇數串不予考慮。

  • C語言實現如下

#include<stdio.h>
#include<string.h>

int main(){
	char a[1000001];
	gets(a);
	int flag = 0;
	for(int i=0,j=strlen(a)/2;j<strlen(a);i++,j++){
		if(a[i]!=a[j]){
			flag =1;
			break;
		}
	}
	if(!flag){
		printf("YES\n");
	}else{
		printf("NO\n");
	}
	return 0;
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章