大佬,牛!!!
- 题目:给一两个字符串a和b,然后让你从一个位置进行分割,两个字符串的前半部分与后半部分进行拼接,判断是能否得到一个回文字符串。注意,拼接出来的是两个字符串,只要有一个满足就行了。
- 我的思路:其实这个题目我是有思路的,跟大佬的一样,只不过写的过程中没有想到拆分方法,写的有点乱,然后比较晚了,就直接看大佬的思路了。下面说一下大佬的思路。
- 大佬思路:这个题目,有两种情况,只要一个满足就行了,因此我们先假设用a的前半部分和b的后半部分。然后再交换一下就行了,两个的结果用一个或者进行。然后双指针对两个字符串进行便利,两个一样就往中间走。但是需要注意,如果l和r的位置不一样,则需要判断是不是有一个字符串的从l到r之间满足回文,如果满足,从l到r有一个字符串满足回文,则也是满足条件的。这个判断也可以写一个方法。
- 技巧:双指针,“或”的使用
java代码
class Solution {
public boolean checkPalindromeFormation(String a, String b) {
return checkConcatenation(a, b) || checkConcatenation(b, a);
}
public boolean checkConcatenation(String a, String b) {
int n = a.length();
int left = 0, right = n - 1;
while (left < right && a.charAt(left) == b.charAt(right)) {
left++;
right--;
}
if (left >= right) {
return true;
}
return checkSelfPalindrome(a, left, right) || checkSelfPalindrome(b, left, right);
}
public boolean checkSelfPalindrome(String a, int left, int right) {
while (left < right && a.charAt(left) == a.charAt(right)) {
left++;
right--;
}
return left >= right;
}
}
- 总结:题目很有意思,这里如果不用两个方法,则会有很多重复的代码。最后附上大佬的链接。