判斷一個字串是否為另外一個字串旋轉之後的字串。 例如:給定s1 =AABCD和s2 = BCDAA,返回1,給定s1=abcd和s2=ACBD,返回0.
阿新 • • 發佈:2018-12-20
判斷一個字串是否為另外一個字串旋轉之後的字串。 例如:給定s1 =AABCD和s2 = BCDAA,返回1,給定s1=abcd和s2=ACBD,返回0. AABCD左旋一個字元得到ABCDA AABCD左旋兩個字元得到BCDAA AABCD右旋一個字元得到DAABC
方法1:
left_rotate:每次左旋依次,判斷旋轉之後的字串與目標字串是否一致,如果左旋了strlen(str)次,仍然沒有找到,返回0
方法2:
把目標串拼接相同的內容,判斷源串是否為目標的子串,如果是,目標串肯定是源串旋轉之後的內容
dest ----->abcd src ------>cdab 拼接後 abcdab cd
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<string.h> void reverse(char* start, char* end){ while (start < end){ char temp = *start; *start = *end; *end = temp; start++; end--; } } void left_rotate(char * str, int k){ int len = strlen(str); //旋轉前k個字元 reverse(str, str + k - 1); //旋轉剩餘的字串 reverse(str + k, str + len - 1); //旋轉整體 reverse(str, str + len - 1); } int is_rotate(char* dest, char* src){ if (strlen(dest) != strlen(src)){ return 0; } if (!strcmp(dest, src)){ return 1; } int k = strlen(dest); k--; while (k--){ //每次旋轉一次 left_rotate(src, 1); //判斷旋轉之後的內容是否和目標一致 if (! strcmp(dest, src)){ return 1; } } return 0; } int main(){ char dest[100]; char src[100]; scanf("%s", &dest); scanf("%s", &src); printf("%d\n", is_rotate(dest,src)); system("pause"); return 0; }