【问题标题】:How to determine if 2 different words have the same letters?如何确定2个不同的单词是否具有相同的字母?
【发布时间】:2014-12-19 11:55:08
【问题描述】:

我有一个包含字典中所有单词的单词列表,我应该使用该列表来查找任何输入的单词是否具有与其他单词相同的字符。

我尝试使用 Arrays.sort() 方法对每个单词和输入单词进行字母排序,然后使用 .equals() 方法比较两个字符串。然后打印 .equals() 为真的实例。

但是,当我这样做时,输出只会打印列表中的每个单词,我不知道为什么。

为清楚起见进行编辑:想法是确定列表中与输入匹配的单词。 例如:如果我输入 act,所有带有字母 a、c 和 t 的单词都将是输出。在这种情况下,唯一的输出将是 cat。

【问题讨论】:

  • 向我们展示代码。
  • 就像一个乱七八糟的词?那么tea 也会匹配eat 吗?
  • 这个问题不是特别清楚。我不确定为什么对我的答案投反对票,但如果这不符合您的要求,请编辑您的问题,以便我们知道您在问什么。

标签: java arrays string sorting arraylist


【解决方案1】:

判断两个单词是否共享相同字母的简单算法:

  1. 对每个单词中的字母进行排序
  2. 按字母顺序排列结果
  3. 查找重复项

当然,这仅显示字谜的存在。返回一个字谜列表需要更多的工作。 一种方法是制作一个 Map,其中您的键是已排序的单词(即,每个单词中的字符已被排序),而值是具有这些字母的单词列表。

示例(代码未经测试,仅供说明):

Map <String, List<String>> anagrams = new HashMap<String, List<String>>();
for (String s:inputList)
{
  key = sort(s); // returns s as String, chars sorted, trivial
  if (anagrams.get(key) == null)
  { 
    anagrams.put(key, new LinkedList<String>());
  }
  anagrams.get(key).add (s);
}

【讨论】:

    【解决方案2】:
      String lst[] = {"asd","qwe","zxc"}; 
      System.out.println(Arrays.asList(lst).contains("assd"));
    

    【讨论】:

      【解决方案3】:

      这个问题不是很清楚,但我会提供一个与我见过的其他问题不同的解决方案:

      您也可以使用 list removeAll 来比较两个列表之间的常用字母...

      listA.removeAll(listB); //listA will contain any letters not common to listB
      if (listA.size() == 0) {
          return true; 
      }
      

      测试输出:

      apppppppleeeeeeee <-- Input
      [a, p, p, p, p, p, p, p, l, e, e, e, e, e, e, e, e] //String split 1
      [a, p, p, l, e] //String split 2
      letters are the same
      
      appleeeeeef <-- Input
      [a, p, p, l, e, e, e, e, e, e, f]
      [a, p, p, l, e]
      contains different letters
      

      代码:

      public class Main {
      
          public Main () {
              Scanner scan;
              scan = new Scanner(System.in);
              String input = scan.nextLine(); 
              if(check(split(input), split("apple"))) {
                  System.out.println("letters are the same");
              }
              else {
                  System.out.println("contains different letters");
              }
          }
      
          public boolean check(ArrayList<String> listA, ArrayList<String> listB) {
              listA.removeAll(listB); //listA will contain any letters not common to listB
              if (listA.size() == 0) 
                  return true;
              return false;
          }
      
          public ArrayList<String> split(String word) {
              String[] splitMe = word.split("(?!^)");
              ArrayList<String> splitList = new ArrayList<String>();
              for (int i = 0; i < splitMe.length; i++) {
                  splitList.add(splitMe[i]);  
              }
              System.out.println(splitList);
              return splitList;
          }
      
          public static void main(String[] args) {
              Main main = new Main();
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-24
        • 2013-08-25
        • 2021-05-16
        • 1970-01-01
        • 2021-05-24
        • 2013-06-07
        • 1970-01-01
        • 2018-09-18
        相关资源
        最近更新 更多