为什么以下问题的所有测试用例都没有通过?
Why all the test cases are not getting passed for the below question?
我要解决的编码问题是这个。我试图解决但不是所有的测试用例都通过我找不到可能是什么原因?
识别可能的单词:侦探 Bakshi 在破案时偶然发现一封信,其中有很多单词,其中一个字符缺失,即单词中的一个字符被下划线代替。例如“Fi_er”。他还发现了一些细纸条,上面有一组用冒号分隔的单词,例如“Fever:filer:Filter:Fixer:fiber:fibre:tailor:offer”。他可以看出,少了一个字的那个词,是那些细纸条上可能出现的词之一。 Bakshi 侦探找到您(计算机程序员)寻求帮助,帮助您识别每个不完整单词的可能单词。
你需要编写一个函数来识别可能的单词集。
函数 identifyPossibleWords 将两个字符串作为输入
其中,
input1 包含不完整的单词,并且
input2 是包含一组由冒号分隔的单词的字符串。
该函数应该从 input2 中找到所有可能的词来替换不完整的词 input1,并且 return 结果采用下面建议的格式。
示例 1 -
输入 1 = “Fi_er”
input2 = “Fever:filer:Filter:Fixer:fiber:fibre:tailor:offer”
输出字符串应return编辑为“FILER:FIXER:FIBER”
请注意 –
输出字符串应该包含可以替换input1中不完整单词的所有可能单词的集合
输出字符串中的所有单词都应以大写形式存储
输出字符串中的所有单词应按照它们在 input2 中出现的顺序出现,即在上面的示例中,我们有 FILER,然后是 FIXER,然后是 FIBER。
在 input2 中搜索 input1 时,忽略字母的大小写,即“Fi_er”与“filer”以及“Fixer”和“fiber”匹配。
重要提示:如果 input2 中的 none 个单词可能替换 input1,则输出字符串应包含字符串“ERROR-009”
假设:
Input1 将只包含一个单词,其中只有 1 个字符被下划线“_”替换
Input2 将包含一系列由冒号分隔的单词,中间没有 space 字符
Input2 将不包含除下划线和字母字符以外的任何其他特殊字符。
我的问题解答是:
import java.io.*;
import java.util.*;
class UserMaincode
{
public String indentifyPossibleWords(String input1, String input2)
{
input1=input1.toUpperCase();
input2=input2.toUpperCase();
String arr1[]=input1.split("_");
String arr2[]=input2.split(":");
StringBuilder sb=new StringBuilder("");
for(int i=0;i<arr2.length;i++){
if(arr2[i].matches(arr1[0]+"."+arr1[1])){
sb.append(arr2[i]+":");
}
}
if(sb.length()!=0){
sb.deleteCharAt(sb.length()-1);
}
String s=sb.toString();
if(s==""){
return "ERROR-009";
}
return s;
}
}
但是一些隐藏的测试用例没有通过。哪里有问题。
我从网上找到了一个代码,它通过了所有的测试用例。请参考此 link。
https://www.csinfo360.com/2020/01/cracking-coding-interview-step-11.html
有很多方法可以达到上述问题的预期结果。自从;您在标签中提到了 regex
;因此,我将尝试使用正则表达式提供可能的解决方案。虽然;这也可以在没有他们的情况下实现。
建议程序:
1. Create a regex from the given input1 i.e. replace the _ present anywhere inside input1 with regex dot (.) meta-character.
2. Split the string based on :.
3. Keep a count of length of spliced array of input2.
4. for each item in input2:
5. match using the regex formed in step 1
If successful
append to upper-cased result.
else:
increment the counter.
6. if counter == length of spliced array i.e. no match found
return "ERROR-009"
else
return the appended result.
在java中执行上述程序:
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class Main
{
public static void main(String[] args) {
System.out.println(identifyPossibleWords("Fi_er", "Fever:filer:Filter:Fixer:fiber:fibre:tailor:offer"));
// Fever:fiqqer:Filter:Fixxer:fibber:fibre:tailor:offer return ERROR-009
}
public static String identifyPossibleWords(String input1, String input2){
input1 = input1.replace("_", ".");
StringBuilder sb = new StringBuilder();
int counter = 0;
int lengthOfInput2 = input2.split(":").length;
final Pattern pattern = Pattern.compile(input1, Pattern.CASE_INSENSITIVE);
for(String str: input2.split(":")){
Matcher matcher = pattern.matcher(str);
if(matcher.matches())sb.append(matcher.group(0).toUpperCase() + "\n"); // \n to print in new line. You can edit the code accordingly.
else counter++;
}
if(counter == lengthOfInput2)return "ERROR-009";
return sb.toString();
}
}
您可以在 here.
中找到上述实现的示例 运行
轻松修复--->
input1=input1.toUpperCase();
input2=input2.toUpperCase();
String arr1[]=input1.split("_");
String arr2[]=input2.split(":");
StringBuilder sb=new StringBuilder("");
for(int i=0;i<arr2.length;i++){
if(arr2[i].matches(arr1[0]+"."+arr1[1])){
sb.append(arr2[i]+":");
}
}
if(sb.length()!=0){
sb.deleteCharAt(sb.length()-1);
}
String x = "ERROR-009";
String s=sb.toString();
if(sb.length()==0){ // this
return x.toString();
}
return s;
}
}
我要解决的编码问题是这个。我试图解决但不是所有的测试用例都通过我找不到可能是什么原因?
识别可能的单词:侦探 Bakshi 在破案时偶然发现一封信,其中有很多单词,其中一个字符缺失,即单词中的一个字符被下划线代替。例如“Fi_er”。他还发现了一些细纸条,上面有一组用冒号分隔的单词,例如“Fever:filer:Filter:Fixer:fiber:fibre:tailor:offer”。他可以看出,少了一个字的那个词,是那些细纸条上可能出现的词之一。 Bakshi 侦探找到您(计算机程序员)寻求帮助,帮助您识别每个不完整单词的可能单词。
你需要编写一个函数来识别可能的单词集。 函数 identifyPossibleWords 将两个字符串作为输入 其中,
input1 包含不完整的单词,并且 input2 是包含一组由冒号分隔的单词的字符串。
该函数应该从 input2 中找到所有可能的词来替换不完整的词 input1,并且 return 结果采用下面建议的格式。
示例 1 -
输入 1 = “Fi_er” input2 = “Fever:filer:Filter:Fixer:fiber:fibre:tailor:offer”
输出字符串应return编辑为“FILER:FIXER:FIBER” 请注意 –
输出字符串应该包含可以替换input1中不完整单词的所有可能单词的集合 输出字符串中的所有单词都应以大写形式存储 输出字符串中的所有单词应按照它们在 input2 中出现的顺序出现,即在上面的示例中,我们有 FILER,然后是 FIXER,然后是 FIBER。 在 input2 中搜索 input1 时,忽略字母的大小写,即“Fi_er”与“filer”以及“Fixer”和“fiber”匹配。 重要提示:如果 input2 中的 none 个单词可能替换 input1,则输出字符串应包含字符串“ERROR-009” 假设:
Input1 将只包含一个单词,其中只有 1 个字符被下划线“_”替换 Input2 将包含一系列由冒号分隔的单词,中间没有 space 字符 Input2 将不包含除下划线和字母字符以外的任何其他特殊字符。
我的问题解答是:
import java.io.*;
import java.util.*;
class UserMaincode
{
public String indentifyPossibleWords(String input1, String input2)
{
input1=input1.toUpperCase();
input2=input2.toUpperCase();
String arr1[]=input1.split("_");
String arr2[]=input2.split(":");
StringBuilder sb=new StringBuilder("");
for(int i=0;i<arr2.length;i++){
if(arr2[i].matches(arr1[0]+"."+arr1[1])){
sb.append(arr2[i]+":");
}
}
if(sb.length()!=0){
sb.deleteCharAt(sb.length()-1);
}
String s=sb.toString();
if(s==""){
return "ERROR-009";
}
return s;
}
}
但是一些隐藏的测试用例没有通过。哪里有问题。
我从网上找到了一个代码,它通过了所有的测试用例。请参考此 link。
https://www.csinfo360.com/2020/01/cracking-coding-interview-step-11.html
有很多方法可以达到上述问题的预期结果。自从;您在标签中提到了 regex
;因此,我将尝试使用正则表达式提供可能的解决方案。虽然;这也可以在没有他们的情况下实现。
建议程序:
1. Create a regex from the given input1 i.e. replace the _ present anywhere inside input1 with regex dot (.) meta-character.
2. Split the string based on :.
3. Keep a count of length of spliced array of input2.
4. for each item in input2:
5. match using the regex formed in step 1
If successful
append to upper-cased result.
else:
increment the counter.
6. if counter == length of spliced array i.e. no match found
return "ERROR-009"
else
return the appended result.
在java中执行上述程序:
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class Main
{
public static void main(String[] args) {
System.out.println(identifyPossibleWords("Fi_er", "Fever:filer:Filter:Fixer:fiber:fibre:tailor:offer"));
// Fever:fiqqer:Filter:Fixxer:fibber:fibre:tailor:offer return ERROR-009
}
public static String identifyPossibleWords(String input1, String input2){
input1 = input1.replace("_", ".");
StringBuilder sb = new StringBuilder();
int counter = 0;
int lengthOfInput2 = input2.split(":").length;
final Pattern pattern = Pattern.compile(input1, Pattern.CASE_INSENSITIVE);
for(String str: input2.split(":")){
Matcher matcher = pattern.matcher(str);
if(matcher.matches())sb.append(matcher.group(0).toUpperCase() + "\n"); // \n to print in new line. You can edit the code accordingly.
else counter++;
}
if(counter == lengthOfInput2)return "ERROR-009";
return sb.toString();
}
}
您可以在 here.
中找到上述实现的示例 运行轻松修复--->
input1=input1.toUpperCase();
input2=input2.toUpperCase();
String arr1[]=input1.split("_");
String arr2[]=input2.split(":");
StringBuilder sb=new StringBuilder("");
for(int i=0;i<arr2.length;i++){
if(arr2[i].matches(arr1[0]+"."+arr1[1])){
sb.append(arr2[i]+":");
}
}
if(sb.length()!=0){
sb.deleteCharAt(sb.length()-1);
}
String x = "ERROR-009";
String s=sb.toString();
if(sb.length()==0){ // this
return x.toString();
}
return s;
}
}