给定两个字符串,请设计一个方法来判定其中一个字符串是否为另一个字符串的置换。
置换的意思是,通过改变顺序可以使得两个字符串相等。
"abc"
为 "cba"
的置换。
"aabc"
不是 "abcc"
的置换。
public boolean stringPermutation(String A, String B) {
char[] c1 = A.toCharArray();
char[] c2 = B.toCharArray();
if (c1.length != c2.length ) {
return false;
}
if (A.equals("") && B.equals("")) {
return true;
}
// StringBuilder stringBuilderA = new StringBuilder();
// stringBuilderA.append(A);
Arrays.sort(c1);
Arrays.sort(c2);
boolean bool =false;
for (int i=0; i<c1.length; i++) {
for (int j=1; j<c2.length; j++) {
if (c1[i] == c2[j]) {
bool = true;
}else {
bool = false;
}
}
}
return bool;
}
改进后的算法 即int数组每一个char对应的位置1 再减1 数组最后等于0说明A可以置换成B 否则不是
public boolean stringPermutation(String A, String B) {
// char[] c1 = A.toCharArray();
// char[] c2 = B.toCharArray();
// if (c1.length != c2.length ) {
// return false;
// }
// if (A.equals("") && B.equals("")) {
// return true;
// }
StringBuilder stringBuilderA = new StringBuilder();
stringBuilderA.append(A);
// Arrays.sort(c1);
// Arrays.sort(c2);
// boolean bool =false;
// for (int i=0; i<c1.length; i++) {
// for (int j=1; j<c2.length; j++) {
// if (c1[i] == c2[j]) {
// bool = true;
// }else {
// bool = false;
// }
// }
// }
// return bool;
int[] cnt = new int[1000];
for (int i = 0; i < A.length(); ++i) {
cnt[(int) A.charAt(i)] += 1;
}
for (int i = 0; i < B.length(); ++i) {
cnt[(int) B.charAt(i)] -= 1;
}
for (int i = 0; i < 1000; ++i) {
if (cnt[i] != 0) {
return false;
}else {
return true;
}
}
return true;
}