问题
给定isSubstring方法(经典的KMP算法,下面仅给出最一般的实现方式,在另一篇中专门解读KMP),判断一个字符串是否由另一个字符串翻转得到,例如abc,cab。
分析
- 如果符合题目条件,例如对于abc, cab他们有一些特征,这两个串都是由 ab 和 c 拼接得到的,只是拼接的顺序不同而已。
- 所以存在下面的规律,S2是否是S1旋转得到,如果是则需要保证S2是S1S1的子串:
- S1 = xy
- S2 = yx
- S1S1 = xyxy
- S2是S1的子串
- 这样分析好之后实现就很简单了,只需要判断S2是否是S1S1的子串就可以,这里判断子串的方法是经典的KMP问题,此处仅给出最一般的o(nk)的算法,随后会详细分析KMP算法。
实现
/**
* 1.8 问题:给定isSubstring方法(经典的KMP算法,下面仅给出最一般的实现方式,在另一篇中专门解读KMP),判断一个字符串是否由另一个字符串翻转得到,例如abc,cab
* 思路:S2是否是S1旋转得到,如果是则需要保证S2是S1S1的子串
* S1 = xy
* S2 = yx
* S1S1 = xyxy
* S2是S1的子串
*/
publi