比较字谜字符串时输出错误

Posted

技术标签:

【中文标题】比较字谜字符串时输出错误【英文标题】:Output error when comparing anagrams strings 【发布时间】:2020-11-30 18:55:35 【问题描述】:

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

/*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】:

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

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

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

话虽如此,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);

【讨论】:

【参考方案2】:

要检查两个字符串是否是字谜,您可以比较这些字符串的两个排序字符数组

String a = "chinmay";
String b = "maychin";

char[] aArr = a.toCharArray();
char[] bArr = b.toCharArray();

Arrays.sort(aArr);
Arrays.sort(bArr);

boolean isAnagram = Arrays.equals(aArr, bArr);

System.out.println(isAnagram); // true

另见:How do you check if a word has an anagram that is a palindrome?

【讨论】:

以上是关于比较字谜字符串时输出错误的主要内容,如果未能解决你的问题,请参考以下文章

将字符串与字符串列表进行比较以在 Python 中查找字谜

优化子串字谜比较算法

CTCI 制作字谜 - 得到不正确的输出

Python - 比较 2 个单词并检查它们是不是是字谜

如何在java中对字符串进行排序时忽略空格?

这是一个字谜程序,我正在检查两个相同长度的字符串是不是相互字谜