如何解决卡在java anagrams字符串中的输出错误上
我正在为极客解决有关geek的anagram问题,但我认为输出格式与我在所有代码上所显示的问题相似,但测试用例存在问题,因此请查看我的代码并告诉我问题出在哪里这个
/*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++) {enter code here
if(al[i] !=0) {
isAnagram = false;
break;
}
}
if(isAnagram) {
System.out.println("1");
} else {
System.out.println("0");
}
}
}
}
[
解决方法
您需要在boolean isAnagram = true;
循环内移动while (t-- > 0)
。
当前,如果在第一个测试中文本不是字谜,则现有代码不会将isAnagram
设置为true
。
此外,如果两个输入字符串的长度不同,则它们也不能是anagram,并且将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);
}
,
要检查两个字符串是否是变位词,您可以比较这些字符串的两个已排序的字符数组:
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?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。