查找字谜的简单算法

时间:2018-08-27 18:47:16

标签: java anagram

public class anagrm {
public static void main(String args[]){
    String s1 = new String();
    String s2 = new String();
    int count = 0;
    Scanner sc = new Scanner(System.in);
    s1 = sc.nextLine();``
    s2 = sc.nextLine();
    if(s1.length()==s2.length())
        for (int i = 0; i < s1.length(); i++)
            for (int j = 0; j < s1.length(); j++)
                if (s1.charAt(i) == s2.charAt(j)){
                    count++
                }

    if(count>=s1.length())
        System.out.println("string is anagram");
    else
        System.out.println("string is not anagram");
    System.out.println(count);
}


}

这对军队和马尔默来说都是真的。.我知道错误在哪里,但我想以此方式完成...

2 个答案:

答案 0 :(得分:1)

您会遇到错误,因为只要s1中一个字母出现不止一次,即使s2仅具有该字母一次,您每次都会递增计数器。解决此问题的一种方法是改用StringBuilder,并且在找到字母匹配项时,请使用deleteCharAt方法从s2中删除该字母。为此,您还需要更改第二个for循环以遍历s2.length,因为它会越来越短。不是那么优雅,但是会起作用。

答案 1 :(得分:0)

正如其他人提到的,无论s1拥有字母的次数如何,只要字母匹配,您的count变量都会递增。如果要使用计数解决方案,则应增加每个字母的计数:

import java.util.HashMap
import java.util.Map

/* This is how to declare HashMap */
HashMap<char, String> s1map = new HashMap<char, String>();
HashMap<char, String> s2map = new HashMap<char, String>();

for (int j = 0; j < s1.length(); j++){
    //We create 2 hashmaps to count the number of each char in each word separately
    s1map.put(key, s1map.getOrDefault(key, 0) + 1);
    s2map.put(key, s2map.getOrDefault(key, 0) + 1);
}

最后,您可以将生成的地图与以下内容进行比较:

if s1map.equals(s2map){
    print("They are anagrams")
}
else{
    print("They are not anagrams")
}