document.write('
如果题目没有对isString使用的限制,那么可以通过求出s2进行旋转的所有组合,然后与s1进行比较。但是这种方法的时间复杂度比较高。通过对字符
串旋转进行仔细分析,发现对字符串s1进行旋转得到的字符串一定是s1s1的子串。因此可以通过判断s2是否是s1s1的子串来判断s2能否通过旋转s1得
到。例如:s1=“waterbottle”,那么s1s1=“waterbottlewaterbottle”,显然s2是s1s1的子串,因此s2能通过旋转s1得到。实现代码如下:
 #函数功能:判断str2是否为str1的子串
 def isSubstring(str1,str2):
 return str1.find(str2)!=-1
 #函数功能: 判断str2是否可以通过旋转str1得到
 def rotateSame(str1,str2):
 if str1==None or str2==None:
 return False
 len1=len(str1)
 len2=len(str2)
 #判断两个字符串长度是否相等, 如果不相等, 那么不可能通过旋转得到
 if len1!=len2:
 return False
 #申请临时空间存储str1str1, 多申请了一个空间存储\'\\0\'
 tmp=[None]*(2*len1+1)
 #是tmp为str1str1
 i=0
 while i<len1:
 tmp[i]=list(str1)[i]
 tmp[i+len1]=list(str1)[i]
 i+=1
 tmp[2*len1]=\'\\0\'
 #判断str2是否为tmp的子串
 result=isSubstring(".join(tmp),str2)
 return result
 
 if __name__=="__main__":
 str1="waterbottle"
 str2="erbottlewat"
 result=rotateSame(str1,str2)
 if result:
 print str2+"可以通过旋转"+str1+\'得到"
 else:
 print str2+"不可以通过旋转"+str1+"得到"
 程序的运行结果为:
 erbottlewat可以通过旋转waterbottle得到
 为了简单起见,这种方法中isSubstring通过调用库函数的方式进行了实现,当然在采用KMP算法实现的isSubstring的效率最高。
 算法性能分析:

 这种方法首先对字符串str1进行了一次遍历,时间复杂度为O(N)(其中,N为字符串的长度),接着调用了isSubstring函数(假设采用了KMP算法),这种方法的时间复杂度为O(2N+N)=O(3N),因此,整个算法的时间复杂度为O(N)。此外这种方法申请了2N+1个存储空间,因此,算法的空间复杂度也为O(N)。 

');