1. 程式人生 > >字串S1是否可以由字串S2通 過迴圈移位而得到

字串S1是否可以由字串S2通 過迴圈移位而得到

第一種方法是將 s2 的前 i 個位元組與 s2 的後 i 個位元組相比較,判斷是否相同,若相同,則再判斷 s2 的後 n-i 個位元組是否與 s1 的前 n-i 個位元組是否相同,若相同證明字串S1可以由字串S2通 過迴圈移位而得到,否則迴圈 i++ , 程式碼如下:

#include <iostream>
using namespace std;

int isCircle( char *s1 , char *s2 ){
    int flag = 0;
    if( strlen(s1) == strlen(s2) ){
        if( strlen(s1) == 0
){ flag = 1; }else{ int len = strlen(s1); for( int i = 0 ; i < len ; i++ ){ if( !strncmp( s1,s2+len-i,i ) && !strncmp( s1+i , s2 , len-i ) ){ flag = 1; break; } } } } return
flag; } int main(){ char s1[] = "abcd"; char s2[] = "dadc"; printf("%d\n",isCircle(s1,s2) ); }

第二種方法是在 s2+s2 查詢是否存在 s1 ,若存在說明字串S1可以由字串S2通過迴圈移位而得到,程式碼如下:

#include <iostream>
#include <string>
using namespace std;

int isCircle( string s1 , string s2 ){
    if( s1.size() == s2.size() ){
        string
s3 = s2 + s2; if( s3.find( s1 ) != string::npos ){ return 1; } } return 0; } int main(){ string s1 , s2 ; cin >> s1 >> s2; cout << isCircle( s1,s2 ); }