给定两个由小写字母构成的字符串 A
和 B
,只要我们可以通过交换 A
中的两个字母得到与 B
相等的结果,就返回 true
;否则返回 false
。
示例1:
输入: A = "ab", B = "ba"
输出: true
示例2
输入: A = "ab", B = "ab"
输出: false
示例3
输入: A = "aa", B = "aa"
输出: true
示例4
输入: A = "aaaaaaabc", B = "aaaaaaacb"
输出: true
示例5
输入: A = "", B = "aa"
输出: false
解答关键
1.当两个字符串完全相等的时候,其中任意一个字符串有两个相同的字母,则返回true;判断字符串中相同字符,我罗列了两种算法
2.当字符串前部分满足要求后,必须对后半部分进行切分,如果后半部分完全相同,则才能返回true;
package bettich;
import java.util.HashSet;
import java.util.Set;
/**
*
*/
public class Solution859 {
public static boolean buddyStrings(String A, String B) {
if (A.length()!=B.length()) {
return false;
}
char[] data1=A.toCharArray();
char[] data2=B.toCharArray();
int count=0;
char[] str=null;
while(A.equals(B)) {
// Set<Character> set=new HashSet<>();
// for (int i = 0; i <A.length(); i++) {
// if (set.contains(A.charAt(i))) {
// return true;
// }else
// set.add(A.charAt(i));
// }
int[] charNum=new int[255];
for (int i = 0; i <data1.length; i++) {
char c=data1[i];
if (c<='z'&&c>='a') {
charNum[c]++;
if (charNum[c]>1) {
return true;
}
}
}
return false;
}
for (int i=0;i<data1.length&&i<data2.length;i++) {
if(data1[i]<96||data2[i]<96) {
return false;
}
if (data1[i]==data2[i]) {
continue;
}
count++;
if (count>2) {
return false;
}
if (str==null) {
str=new char[2];
str[0]=data1[i];
str[1]=data2[i];
}else if (data1[i]==str[1]&&data2[i]==str[0]) {
if (i+1<A.length()) {
String str1 = A.substring(i + 1);
String str2 = B.substring(i + 1);
if (str1.equals(str2)) {
return true;
}
return false;
}else {
return true;
}
}
}
return false;
}
public static void main(String[] args) {
System.out.println(buddyStrings("ab","ab"));
}
}