今天看算法(第四版)看到一个“回环变位”
题目描述很简单:
如果字符串s重的字符循环移动任意位置之后能够得到另一个字符串t,那么s就被成为s的回环变位(circular rotation) 举例省略…
问题:请编写一个程序检查2个给定的字符串s和t是否互为回环变位。
提示:判断条件只需要一行代码
看到题目当时满脑子想的都是双重循环啊,游标移动啊各种i,j,k……
结果来一句这样的提示,当时我就受不了了,决定去看一下答案….
**
好吧是我太蠢….
**
答案是这样的
(s.length() == t.length()) && (s.concat(s).indexOf(t) >= 0)
乍一看,好像真的可以…顿时鄙视了自己的各种游标循环i,j,k…
(虽然可能底层也是各种循环游标i,j,k,但是别人都实现了的基类直接用明显更省事…)
但是也发现自己对String类的concat函数和indexOf的各种重载不懂
一下是jdk文档的描述
public String concat(String str)将指定字符串连接到此字符串的结尾。
如果参数字符串的长度为 0,则返回此 String 对象。否则,创建一个新的 String 对象,用来表示由此 String 对象表示的字符序列和参数字符串表示的字符序列连接而成的字符序列。
示例:
"cares".concat("s") returns "caress"
"to".concat("get").concat("her") returns "together"
参数:
str - 连接到此 String 结尾的 String。
返回:
一个字符串,它表示在此对象字符后连接字符串参数字符而成的字符。
public int indexOf(String str)返回指定子字符串在此字符串中第一次出现处的索引。返回的整数是
this.startsWith(str, k)
为 true 的最小 k 值。
参数:
str - 任意字符串。
返回:
如果字符串参数作为一个子字符串在此对象中出现,则返回第一个这种子字符串的第一个字符的索引;如果它不作为一个子字符串出现,则返回 -1。