使用从各种输入字符串中提取的字符形成字符串。检查错误,提交时会抛出 NZEC 错误
Posted
技术标签:
【中文标题】使用从各种输入字符串中提取的字符形成字符串。检查错误,提交时会抛出 NZEC 错误【英文标题】:Form a string using characters provided taken from various input strings. Check for error, it throws NZEC error on submitting 【发布时间】:2020-01-23 04:37:36 【问题描述】:在这个问题中,我们需要找到可以使用从输入字符串中提取的字符形成的“codechef”的数量。
第一行是测试用例的数量,下一行是测试用例的数量 输入字符串。输出是一个整数值,表示 可以从给定的“codechef”字符串的数量 字符。
它在提交时抛出 NZEC 错误,当我使用 try catch
块来避免它时,它显示错误答案。这是来自 codechef 初学者部分的问题。
Problem Link
我的做法:
将输入string
中的每个字符与频率一起存储到Hashmap
中。
创建一个包含单词"codechef"
中使用的字符的字符数组。另一个整数数组包含这些对应字符的频率,这里我的数组是
char[ ] c =c,o,d,e,h,f
int[ ] arr=2,1,1,2,1,1
我运行一个循环遍历 hashmap 中的每个字符,并删除构词所需的字符数。每一次完整的遍历都会增加一个计数。
实施:
import java.util.*;
import java.lang.*;
import java.io.*;
class Codechef
public static void main (String[] args) throws java.lang.Exception
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
while(T-->0)
int n = sc.nextInt();
sc.nextLine();
String s;
HashMap<Character,Integer> hmap = new HashMap<Character,Integer>();
for(int i = 0;i < n;i++)
s = sc.nextLine();
for(int j = 0;j < s.length();j++)
if(hmap.containsKey(s.charAt(j)))
hmap.put(s.charAt(j),hmap.get(s.charAt(j))+1);
else
hmap.put(s.charAt(j),1);
/* for(Map.Entry entry:hmap.entrySet())
System.out.println(entry.getKey()+": "+entry.getValue());
*/
int arr[] = 2,1,1,2,1,1;
char crr[] = 'c','o','d','e','h','f';
int count = 0;
int i = 0;
boolean flag = true;
while(flag)
if(hmap.get(crr[i])>=arr[i])
hmap.put(crr[i],hmap.get(crr[i])-arr[i]);
else flag = false;
if(i==5 && flag)
count++;
i = 0;
else
i++;
System.out.println(count);
sc.close();
【问题讨论】:
那么你的问题是什么 代码在 codechef 中提交时抛出 NZEC 错误。当我使用 try catch 块时,它会显示错误的答案。 【参考方案1】:if(hmap.get(crr[i])>=arr[i])
此行包含一个异常,如果 hmap 不包含 crr[i]。 Try catch 在这些站点中总是会给出错误的答案,因为这些站点只检查您的代码生成的答案。
【讨论】:
以上是关于使用从各种输入字符串中提取的字符形成字符串。检查错误,提交时会抛出 NZEC 错误的主要内容,如果未能解决你的问题,请参考以下文章