如何确定2个不同的单词是否具有相同的字母?

时间:2014-10-23 18:05:10

标签: java arrays string sorting arraylist

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

我尝试使用Arrays.sort()方法按字母顺序排列每个单词和输入单词然后使用.equals()方法来比较2个字符串。然后打印.equals()为true的实例。

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

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

3 个答案:

答案 0 :(得分:1)

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

您还可以使用列表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();
    }
}

答案 1 :(得分:0)

找出两个单词是否共用相同字母的简单算法:

  1. 对每个单词中的字母进行排序
  2. 按字母顺序排列结果
  3. 寻找重复项
  4. 这当然只显示了字谜的存在。返回一个字谜列表是一个更多的工作。 一种方法是制作一个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 :(得分:0)

  String lst[] = {"asd","qwe","zxc"}; 
  System.out.println(Arrays.asList(lst).contains("assd"));