字符串置换

给定两个字符串,请设计一个方法来判定其中一个字符串是否为另一个字符串的置换。

置换的意思是,通过改变顺序可以使得两个字符串相等。

原题位置
样例
"abc" 为 "cba" 的置换。
"aabc" 不是 "abcc" 的置换。

答案
public boolean stringPermutation(String A, String B) {
    char[] tmpA = A.toCharArray();
    char[] tmpB = B.toCharArray();
    if (tmpA.length != tmpB.length)
        return false;

    ArrayList<Character> tmpAList = toList(tmpA);
    int size = tmpB.length;
    for (int i = 0; i < size; i++) {
        if (!tmpAList.contains(tmpB[i])) {
            return false;
        } else {
            tmpAList.remove(new Character(tmpB[i]));
        }
    }
    return true;
}

public ArrayList<Character> toList(char[] chars) {
    ArrayList<Character> tmpAList = new ArrayList<>();
    int size = chars.length;
    for (int i = 0; i < size; i++) {
        tmpAList.add(new Character(chars[i]));
    }
    return tmpAList;
}
考察点
  • 基本数据类型与包装类
    • 为了在各种类型间转化,通过各种方法的调用。否则 你无法直接通过变量转化
  • 装箱与拆箱
  • 我这利用list存储的字符
  • 注意list的remove动作
    • 如果直接remove的是char类型,会越界,因为char类型默认转int,这样remove的是index,容易越界,应该调用的是remove(Object)