问题描述:给定两个字符串s1和s2,要求判定s2是否能够被s1做循环移位得到的字符串包含。例如给定s1=aabcd和s2=cdaa,函数返回true;给定s1=abcd,和s2=acbd返回false。
编程之美上解法二是将问题转化,将原来的字符串扩展。
假设s=abcd,则对s循环移位后得到的结果是:
abcd->bcda->cdab->dabc->abcd。
问题解决的步骤:
假设目标字符串是s,待匹配字符串是d。现在从s的第k个位置开始比较,i表示s的下标,j表示d的下标。
若s[i]==d[j],s和d的下标向前移一位,i=(i+1)mod(len(s)),j=j+1,继续比较。直到d所有字符都匹配了,或是所有情况都不包含d时,匹配失败。
若s[i]!=d[j],s的下标向前移一位,