题目:
给定两个字符串, A
和 B
。
A
的旋转操作就是将 A
最左边的字符移动到最右边。 例如, 若 A = 'abcde'
,在移动一次之后结果就是'bcdea'
。如果在若干次旋转操作之后,A
能变成B
,那么返回True
。
示例 1: 输入: A = 'abcde', B = 'cdeab' 输出: true 示例 2: 输入: A = 'abcde', B = 'abced' 输出: false
注意:
A
和B
长度不超过100
。
解题思路:
先找到A字符串的第一个字符再B字符串中对应的位置,然后对B进行旋转,最后把旋转后的A和B比较是否相等。
代码实现:
class Solution { public boolean rotateString(String A, String B) { if (A == null) return A == B; if (A.length() == 0 && B != null) return A.equals(B); if (A.length() != B.length()) return false; char Af = A.charAt(0); for (int i = 0; i < B.length(); i ++) { if (Af == B.charAt(i) && i != 0) { String C = B; C = reverse(C, i, B.length() - 1); C = reverse(C, 0, i - 1); C = reverse(C, 0, B.length() - 1); if (A.equals(C)) return true; } } return false; } private String reverse(String A, int start, int end) { char[] chs = A.toCharArray(); for (int i = start; i <= (start + end) / 2; i ++) { char tmp = chs[i]; chs[i] = chs[end + start - i]; chs[end + start - i] = tmp; } return new String(chs); } }