检查字符串是否与另一个字符串构成的字母相同

时间:2014-09-18 12:44:16

标签: java string compare

这个主题很好地解释了我的愿望。所以我想达到的目标是:

madeOutOfSameLetters("aaasdf", "xyz") // false
madeOutOfSameLetters("aaasdf", "asdf") // false
madeOutOfSameLetters("aaasdf", "aaasdd") // false
madeOutOfSameLetters("aaasdf", "fdsaaa") // true

是否有我可以使用的(组合)方法,或者我需要自己做?

在第二种情况下,我会计算两个字符串的每个字母,将其写入数组并将它们相互比较。但这似乎比我必须要复杂得多。任何更简单的想法?

2 个答案:

答案 0 :(得分:12)

您可以使用String.toCharArray()Arrays.sort(char[])以及Arrays.equals(char[], char[])。就是这样,

public static boolean madeOutOfSameLetters(String a, String b) {
    if (a == null) {
        return b == null;
    } else if (b == null) {
        return false;
    }
    char[] left = a.toCharArray();
    char[] right = b.toCharArray();
    Arrays.sort(left);
    Arrays.sort(right);
    return Arrays.equals(left, right);
}

public static void main(String[] args) throws Exception {
    System.out.println(madeOutOfSameLetters("aaasdf", "xyz")); // false
    System.out.println(madeOutOfSameLetters("aaasdf", "asdf")); // false
    System.out.println(madeOutOfSameLetters("aaasdf", "aaasdd")); // false
    System.out.println(madeOutOfSameLetters("aaasdf", "fdsaaa"));// true
}

输出是请求的

false
false
false
true

答案 1 :(得分:4)

更简单的想法:

  1. 对每个字符串s1s2上的字母进行排序。
  2. s1s2删除重复的字母。
  3. 检查s1是否等于s2。如果是,则两个字符串都是“由相同的字母组成”。否则,他们没有。
  4. 希望它有所帮助。