比较字谜字符串时输出错误
Output error when comparing anagrams strings
我正在为极客解决一个关于极客的字谜问题,但我认为输出格式与问题中显示的不相似,我的所有代码都是正确的,但测试用例中存在问题所以请查看我的代码并告诉我是什么错了。
/*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");
}
}
}
}
这是自定义案例的输出:
您需要将 boolean isAnagram = true;
移动到 while (t-- > 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);
}
要检查两个字符串是否是变位词,您可以比较这些字符串的两个排序字符数组:
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
另请参阅:
我正在为极客解决一个关于极客的字谜问题,但我认为输出格式与问题中显示的不相似,我的所有代码都是正确的,但测试用例中存在问题所以请查看我的代码并告诉我是什么错了。
/*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");
}
}
}
}
这是自定义案例的输出:
您需要将 boolean isAnagram = true;
移动到 while (t-- > 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);
}
要检查两个字符串是否是变位词,您可以比较这些字符串的两个排序字符数组:
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
另请参阅: