首页 > 解决方案 > 比较字谜字符串时输出错误

问题描述

我正在为极客解决一个关于极客的字谜问题,但我认为输出格式与问题中所示的不同,因为我的所有代码都是正确的,但测试用例中存在问题,所以请查看我的代码并告诉我这有什么问题。

/*package whatever //do not write package name here */
    
import java.util.*;
import java.lang.*;
import java.io.*;

class GFG {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int t = sc.nextInt();
        sc.nextLine();
        boolean isAnagram = true;
        while (t-- > 0) {
            String a = sc.nextLine();
            String b = sc.nextLine();

            int al[] = new int[256];
            for (char c : a.toCharArray()) {
                int index = (int) c;
                al[index]++;
            }
            for (char c : b.toCharArray()) {
                int index = (int) c;
                al[index]--;
            }
            for (int i = 0; i < 256; i++) {
                if (al[i] != 0) {
                    isAnagram = false;
                    break;
                }
            }

            if (isAnagram) {
                System.out.println("1");
            } else {
                System.out.println("0");
            }
        }
    }
}

这是自定义案例的输出:

定制案例1

定制案例2

标签: javastringanagram

解决方案


您需要boolean isAnagram = true;while (t-- > 0)循环内移动。

目前,如果在第一次测试中文本不是字谜,现有代码不会设置isAnagramtrue.

此外,如果两个输入字符串的长度不同,则它们不能是字谜,并且显式转换chartoint是多余的。

话虽如此,while循环的内容应该更新如下:

while (t-- > 0) {
    String a = sc.nextLine();
    String b = sc.nextLine();

    boolean isAnagram = a.length() == b.length();
    if (isAnagram) {
        int al[] = new int[256];
        for (int c : a.toCharArray()) {
            al[c]++;
        }

        for (int c : b.toCharArray()) {
            al[c]--;
        }

        for (int i = 0; i < al.length; i++) {
            if (al[i] != 0) {
                isAnagram = false;
                break;
            }
        }
    }
    System.out.println(isAnagram ? 1 : 0);
}

推荐阅读