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);
}
}
这对军队和马尔默来说都是真的。.我知道错误在哪里,但我想以此方式完成...
答案 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")
}