2014-03-18 02:12
题目:判断一个字符串是否由另一个字符串循环移位而成。
解法:首先长度必须相等。然后将第一个串连拼两次,判断第二个串是否在这个连接串中。
代码:
1 // 1.8 Assume you have a method isSubstring which checks if one word is a substring of another. Given two strings, s1 and s2, write code to check if s2 is a rotation of s1 using only one call to isSubstring (i.e., “waterbottle” is a rotation of “erbottlewat”). 2 #include3 #include 4 using namespace std; 5 6 class Solution { 7 public: 8 bool isStringRotation(char *s1, char *s2) { 9 if (s1 == nullptr || s2 == nullptr) {10 return false;11 }12 13 int len1, len2;14 15 len1 = strlen(s1);16 len2 = strlen(s2);17 if (len1 != len2) {18 return false;19 }20 21 const int MAXLEN = 1005;22 static char tmp[MAXLEN];23 24 tmp[0] = 0;25 strcat(tmp, s1);26 strcat(tmp, s1);27 return strstr(tmp, s2) != nullptr;28 }29 private:30 bool isSubstring(char *haystack, char *needle) {31 if (haystack == nullptr || needle == nullptr) {32 return false;33 }34 35 return strstr(haystack, needle) != nullptr;36 }37 };38 39 int main()40 {41 char s1[1005];42 char s2[1005];43 Solution sol;44 45 while (scanf("%s%s", s1, s2) == 2) {46 printf("\"%s\" is ", s2);47 if (!sol.isStringRotation(s1, s2)) {48 printf("not ");49 }50 printf("a rotation of \"%s\".\n", s1);51 }52 53 return 0;54 }