public class AnagramUnoptimized {
public static void main(String[] args) {
String a = "good";
String b = "ogod";
boolean isAnagram = false;
String c = a.toLowerCase();
String d = b.toLowerCase();
if(c.length()==d.length()) {
boolean [] Visited = new boolean[a.length()];
for (int i = 0; i < c.length(); i++) {
isAnagram = false;
for (int j = 0; j < d.length(); j++) {
if (c.charAt(i) == d.charAt(j) && Visited[j]==false) {
isAnagram = true;
Visited[j] = true;
}
}
if (isAnagram == false) {
break;
}
}
}
if(isAnagram==true){
System.out.println("The given Strings are Anagrams");
}
else{
System.out.println("The given Strings are not Anagrams");
}
}
}
我使用了 Visited boolean 数组来检查重复的项目,但现在所有输入都显示“不是字谜”......
如果字符串有重复元素,你能告诉我为什么它显示“Not anagram”吗?
最佳答案
您的代码的问题是,即使 visited[j]
更改为 true
,您仍在继续循环,而此时您需要中断内部循环。执行如下操作:
for (int j = 0; j < d.length(); j++) {
if (c.charAt(i) == d.charAt(j) && visited[j] == false) {
isAnagram = true;
visited[j] = true;
break;
}
}
更改后的输出:
The given Strings are Anagrams
更好的方法如下:
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
String a = "good";
String b = "ogod";
char[] first = a.toLowerCase().toCharArray();
char[] second = b.toLowerCase().toCharArray();
Arrays.sort(first);
Arrays.sort(second);
boolean isAnagram = Arrays.equals(first, second);
if (isAnagram == true) {
System.out.println("The given Strings are Anagrams");
} else {
System.out.println("The given Strings are not Anagrams");
}
}
}
输出:
The given Strings are Anagrams
关于java - Anagram 检查逻辑错误 - 似乎找不到错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60669557/