相关阅读:
字符串逆序问题的解决方法
题目:
如果对于一个字符串A,将A的前面任意一部分挪到后边去形成的字符串称为A的旋转词。
比如A=”12345”,A的旋转词有”12345”,”23451”,”34512”,”45123”和”51234”。
对于两个字符串A和B,请判断A和B是否互为旋转词。
给定两个字符串A和B及他们的长度lena,lenb,请返回一个bool值,代表他们是否互为旋转词。
测试样例:
“cdab”,4,”abcd”,4
返回:true
通过代码:
1 | import java.util.*; |
也可以使用 indexOf。
其区别是:
- contains 是找指定字符串是否包含一个字符串,返回值的 boolean 类型,即只有 true 和 false
- indexOf 有多个重载,但无论哪个,都是做一定的匹配,然后把匹配的第一个字符的位置返回,返回的是 int 类型,如果没找到,那么返回 -1
稍微再深究一下的我看了下 contains
的源码,结果发现他调用的是 indexOf
方法。
源码如下:
1 | /** |
意思就是如上面的区别所说的,他只有两个返回值 true
和 false
。
于是我们继续看一下 indexOf
方法的源码:
1 | /** |
继续可以发现他又调用了 indexOf
的两个参数方法,只不过索引是 0 。
然后我继续看带有两个参数的 indexOf
方法源码如下:
1 | /** |
哈哈,发现他又调用了 indexOf
的方法,这次终于我们可以看到最后的 查找算法 如下:
1 | /** |
总结:
遇到这种问题多查看源码,想深入就得从底层做起!