规则:给定两个字符串,请设计一个方法来判定其中一个字符串是否为另一个字符串的置换。
置换的意思是,通过改变顺序可以使得两个字符串相等。
第一次写的办法:
public class Solution {
/**
* @param A a string
* @param B a string
* @return a boolean
*/
public boolean stringPermutation(String A, String B) {
// Write your code here
byte[] A_byte = A.getBytes();
byte[] B_byte = B.getBytes();
Map<Byte , Integer> map = new HashMap<Byte , Integer>();
for (byte b : A_byte){
map.put(b , map.get(b) == null ? 1 : map.get(b) + 1);
}
for (byte b : B_byte){
if (map.get(b) == null){
return false;
}
int num = map.get(b) - 1;
if (num == 0){
map.remove(b);
}else {
map.put(b,num);
}
}
if (map.size() != 0){
return false;
}
return true;
}
}
题目检查耗时13s
第二个办法:
public class Solution {
/**
* @param A a string
* @param B a string
* @return a boolean
*/
public boolean stringPermutation(String A, String B) {
// Write your code here
if (A.length() != B.length()){
return(false);
}
byte[] A_byte = A.getBytes();
byte[] B_byte = B.getBytes();
sort(A_byte);
sort(B_byte);
for (int i =0; i<A_byte.length;i++){
if (A_byte[i] != B_byte[i]){
return(false);
}
}
return(true);
}
private void sort(byte[] ints) {
for (int i = 0; i < ints.length - 1; i++) {
for (int j = i + 1; j < ints.length; j++) {
if (ints[i] > ints[j]) {
transposition(ints, i, j);
}
}
}
}
private void transposition(byte[] ints, int i, int j) {
byte s;
s = ints[i];
ints[i] = ints[j];
ints[j] = s;
}
}
耗时7s