It's very important that how you understand the concept "rotation". In my eyes, you just shift the word and the letters go out of range will appear at the other end. This kind of understanding is not helpful and I didn't know why I need the isSubString to solve the problem.
An ACM guy told me his understanding and it is a great one: you just concatenate the string with itself on both side, and then pick a segment from the new string. If length of the segment is the same as original string (before concatenation), you will get a rotation of original string.
Based on the better understanding, the algorith has just two step:
1) Check whether the lengths of two string are the same.
2) Concatenate one string and check whether the other one is a substring of the concatenation.
import string def isSubstring(substr, str): for i in range(0, len(str)-len(substr)+1): if substr == str[i]: is_substr = True for j in range(0, len(substr)): if substr[j] != str[i+j]: is_substr = False if True == is_substr: return True return False def is_rotation(str1, str2): # 1. Check the length if len(str1) != len(str2): return False # 2. Concatenate str1 concatenation_str = str1+str1 print concatenation_str # 3. Check whether str2 is a substring of # the concatenation return isSubstring(str2, concatenation_str)