We are given two strings, A
and B
.
A shift on A
consists of taking string A
and moving the leftmost character to the rightmost position. For example, if A = 'abcde'
, then it will be 'bcdea'
after one shift on A
. Return True
if and only if A
can become B
after some number of shifts on A
.
Example 1:
Input: A = 'abcde', B = 'cdeab'
Output: true
Example 2:
Input: A = 'abcde', B = 'abced'
Output: false
Note:
A
andB
will have length at most100
.
LeetCode 796题,循环字符串。本人Accepted答案如下:
class Solution {
public boolean rotateString(String A, String B) {
if (A.equals(B)) {
return true;
}
List<String> list = new ArrayList();
for (int i = 0; i < A.length(); i++) {
StringBuilder sb = new StringBuilder();
sb.append(A.substring(i, A.length()) + A.substring(0, i));
list.add(sb.toString());
}
if (list.contains(B)) {
return true;
} else {
return false;
}
}
}
此题提交过两次,开始漏了AB均为空字符串的情况,之后在算法最开始添加了一个判断,便得以通过。算法的边界情况也是工作或笔试中不可忽略的一个地方,以后编写代码还应更仔细。
而后查看了几种他人提交的解法,发现一种极简单精妙的写法:
class Solution {
public boolean rotateString(String A, String B) {
return A.length() == B.length() && (A + A).contains(B);
}
}
也有一些算法时间复杂度更优的解法,这里就不一一列举了。