字符串移位包含的问题(编程之美)

 问题:给定两个字符串s1和s2,要求判断s2是否能够被通过s1做循环移位(rotate)得到的字符串包含。例如,S1=AABCD和s2=CDAA,返回true;给定s1=ABCD和s2=ACBD,返回false。

我们也可以对循环移位之后的结果进行分析。

以S1 = ABCD为例,先分析对S1进行循环移位之后的结果,如下所示:

ABCD—>BCDA—->CDAB—->DABC—->ABCD……

假设我们把前面的移走的数据进行保留,会发现有如下的规律:

ABCD—>ABCDA—->ABCDAB—->ABCDABC—->ABCDABCD……

因此,可以看出对S1做循环移位所得到的字符串都将是字符串S1S1的子字符串。如果S2可以由S1循环移位得到,那么S2一定在S1S1上,这样时间复杂度就降低了。

    原文作者:imck
    原文地址: https://blog.csdn.net/u012308776/article/details/39455221
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞