【问题标题】:Check if a string is build out of the same letters as another string检查一个字符串是否由与另一个字符串相同的字母组成
【发布时间】:2014-09-18 12:44:15
【问题描述】:

我认为这个话题很好地解释了我的愿望。所以我想达到的是:

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

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

在第二种情况下,我将计算两个字符串的每个字母,将其写入数组并相互比较。但这似乎比对我来说要复杂得多。有更简单的想法吗?

【问题讨论】:

  • 请问为什么第二个是假的?
  • 您希望两个字符串的长度相同吗?
  • ...我没看到。
  • 如果第二个字符串包含与第一个相同的字母但第二个字符串的字母被打乱(即"aaasdf","afadas"),这会返回true吗?
  • 我认为如果字符串向后是相同的,反之亦然,那么是真的

标签: java string compare


【解决方案1】:

您可以使用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

【讨论】:

  • 您也可以使用Arrays.equals(left, right) 而不是将它们转回Strings。
  • @Keppil 谢谢!已编辑。
  • 好主意。这就是我一直在寻找的。非常感谢! ;)
  • @ElliottFrisch - 你到底是怎么理解 OP 想要什么的? :P
【解决方案2】:

一个更简单的想法:

  1. 对每个字符串s1s2上的字母进行排序。
  2. s1s2 中删除重复的字母。
  3. 检查s1 是否等于s2。如果是,那么两个字符串都是“由相同的字母组成的”。否则,他们不会。

希望对你有帮助。

【讨论】:

  • 嗯,删除重复的字母也会使“aaasdf”和“asdf”工作。但没有它(所以只有排序)它会起作用。你知道排序字符串的简单方法吗?所以让“yzxabc”变成“abcxyz”?我的想法是将每一个字母转换成它的 ASCII 值,然后用它构建一个新的字符串。
  • 它击败了我使用 char 数组的逻辑,无论如何:P
  • @Pablo,如果问题下面的 cmets 是正确的,那么您可以添加 1a。 检查字符串是否相同长度?
  • 哦!我不知道它们应该由完全相同的字母组成,包括字母计数。如果是这种情况,只需删除第 2 步即可。
  • 包括字母数?
猜你喜欢
  • 2021-10-04
  • 1970-01-01
  • 2012-03-13
  • 2012-07-12
  • 1970-01-01
  • 2019-05-11
  • 2020-07-19
  • 1970-01-01
相关资源
最近更新 更多