【发布时间】:2015-05-25 07:28:05
【问题描述】:
我正在尝试解决这个问题:https://www.hackerrank.com/challenges/anagram
这是我的代码:
import java.util.*;
public class Anagram {
public static void main(String[] args)
{
Scanner reader = new Scanner(System.in);
int t = reader.nextInt();
while((t--) > 0)
{
String input = reader.nextLine();
if((input.length()) % 2 == 1)
System.out.println(-1);
else
{
int x = input.length();
int q = (int)(Math.floor((x / 2)));
String input1 = input.substring(0, q);
String input2 = input.substring(q, x);
int [] count2 = new int[26];
for(int i = 0; i < input2.length(); i++)
{
char ch2 = input2.charAt(i);
count2[ch2 - 'a']++;
}
// int [] count1 = new int[26];
for(int i = 0; i < input1.length(); i++)
{
char ch1 = input1.charAt(i);
if(count2[i] > 0)
count2[ch1 - 'a']--;
}
int count = 0;
for(int j = 0; j < 26; j++)
{
count = count + Math.abs(count2[j]);
}
System.out.println(count);
}
}
}
}
样本输入
6
aaabbb
ab
abc
mnop
xyyx
xaxbbbxx
预期输出
3
1
-1
2
0
1
我的输出
0
4
1
-1
2
2
谁能告诉我哪里出错了?我找不到错误...
【问题讨论】:
-
我不懂java,java中没有办法比较char吗?我不明白你为什么要制作一个char数组?您需要做的只是遍历前半部分并检查后半部分是否匹配。
-
@ScottSelby 这也应该通过迭代第二半并检查第一半是否匹配来完成。本质上,那将是
O(n^2)算法。 OP 使用的是O(n)。
标签: java java.util.scanner anagram