java - Anagram 检查逻辑错误 - 似乎找不到错误

标签 java anagram

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/

相关文章:

java - Hibernate 的 createCriteria() 是否清理输入?

java - 解码正则表达式 - ^[a-zA-Z0-9 "'&!#$%()*+,-./:;? @[\\]^_`{|}~]+$

java - Libgdx 认为键盘总是被按下

java - 按里面的文本内容搜索文件

c++ - 插入数组的额外字符

java - Keycloak:从自定义端点 (SPI) 发送 AdminEvent

algorithm - 查找给定单词的字谜

java - 寻找字谜的简单算法

Java Anagram 内存不足

c - Anagram - 最小删除数量 - 某些测试用例失败