我正在尝试解决此黑客问题{{3}}
我尝试通过互联网进行搜索,但是找不到解决我的问题的理想解决方案
这是我的代码:
String a = new String();
String b = new String();
a = sc.nextLine();
b = sc.nextLine();
int t = sc.nextInt();
int check = 0;
int againCheck =0;
for (int k =0; k<t; k++)
{
for (int i =0; i<a.length(); i++)
{
char ch = a.charAt(i);
for (int j =0; j<b.length(); j++)
{
check =0;
if (ch != b.charAt(j))
{
check=1;
}
}
againCheck += check;
}
}
System.out.println(againCheck*againCheck);
我希望输出为4,但显示“ NZEC”错误
请问有人可以帮我吗?
答案 0 :(得分:1)
需求状态为 1 ,即输入是数字(N),后跟2 x N行。您的代码正在读取两个字符串,后跟一个数字。尝试将输入的第三行解析为数字时,可能会抛出InputMismatchException
。
提示:
1-诚然,要求不是很明确。但是在示例输入中,第一行是数字。
答案 1 :(得分:0)
不管 hacker-whatsoever.com 如何,我都会给出两个有用的信息:
SIMPLE ALGORITM
在您的解决方案中,您有一个典型的双for
,可用于检查a
中的每个字符是否也位于b
中。那部分不错,但其余部分都是可废弃的。尝试实现这一点:
a
的每个字符,请在b
中查找该字符的第一个匹配项
a
和b
中删除该字符。a
和b
的长度之和。注意:重要的是要跟踪已经遇到的情况:采用这种方法,您会多次计数相同的字符!
如您所见,它只是天真的算法的伪代码。只是给您一个提示,以帮助您学习。实际上,此算法的最大复杂度为 O(n ^ 2)(由于嵌套循环),通常这很不好。现在,一个更好的解决方案。
更好的解决方案
我的算法仅为 O(n)。它是这样工作的:
a
中发现一个字符时,其计数器都会增加1; b
中找到一个字符时,其计数器都会减少1; a
和b
中出现的次数之间的差异。因此,计数器的绝对值之和就是解决方案!要实现它,实际上是在我第一次找到一个字符时添加一个要映射的条目,而不是用整个字母预先构建一个映射。我还用lambda表达式滥用了,所以给你一个非常不同的印象。
代码如下:
import java.util.HashMap;
public class HackerEarthProblemSolver {
private static final String a = //your input string
b = //your input string
static int sum = 0; //the result, must be static because lambda
public static void main (String[] args){
HashMap<Character,Integer> map = new HashMap<>(); //creating the map
for (char c: a.toCharArray()){ //for each character in a
map.computeIfPresent(c, (k,i) -> i+1); //+1 to its counter
map.computeIfAbsent(c , k -> 1); //initialize its counter to 1 (0+1)
}
for (char c: b.toCharArray()){ //for each character in b
map.computeIfPresent(c, (k,i) -> i-1); //-1 to its counter
map.computeIfAbsent(c , k -> -1); //initialize its counter to -1 (0-1)
}
map.forEach((k,i) -> sum += Math.abs(i) ); //summing the absolute values of the counters
System.out.println(sum)
}
}
基本上,两种解决方案都只计算两个字符串共有多少个字母,但是使用的方法不同。
希望我能帮上忙!
答案 2 :(得分:0)
正如我在其他答案中所写的那样,在网站上提交时最好像这样编写代码:
def myFunction():
try:
#MY LOGIC HERE
except Exception as E:
print("ERROR Occurred : {}".format(E))
这将清楚地显示您在每个测试用例中面临的错误。对于像hacker earth这样的网站,在各种测试用例中都有几个输入问题,这是必须的。
谈到您的问题,NZEC 代表:非零退出代码 这可能意味着从输入错误到服务器地震的任何事情。