java - 为什么以下问题的所有测试用例都没有通过?
问题描述
我试图解决的编码问题就是这个。我试图解决但并非所有测试用例都通过了我无法找到可能的原因?
识别可能的单词:Bakshi 侦探在解决一个案件时偶然发现了一封信,其中有很多单词缺少一个字符,即单词中的一个字符被下划线替换。例如“Fi_er”。他还发现了薄纸条,上面有一组用冒号分隔的单词,例如“Fever:filer:Filter:Fixer:fiber:fiber:tailor:offer”。他能从那张薄纸上判断出少了一个字的单词是其中一个可能的单词。侦探 Bakshi 找到您(计算机程序员)寻求帮助,以识别每个不完整单词的可能单词。
您应该编写一个函数来识别一组可能的单词。函数 identifyPossibleWords 将两个字符串作为输入,其中,
input1 包含不完整的单词,input2 是包含一组用冒号分隔的单词的字符串。
该函数预计会从 input2 中找到所有可能的单词,这些单词可以替换不完整的单词 input1,并以下面建议的格式返回结果。
示例 1 -
input1 = “Fi_er” input2 = “Fever:filer:Filter:Fixer:fiber:fiber:tailor:offer”</p>
输出字符串应返回为“FILER:FIXER:FIBER”注意——</p>
输出字符串应包含可替换输入 1 中不完整单词的所有可能单词的集合 输出字符串中的所有单词应以大写形式存储 输出字符串中的所有单词应按照它们在输入 2 中出现的顺序出现,即在上面的例子中,我们有 FILER 后跟 FIXER 后跟 FIBER。在 input2 中搜索 input1 时,忽略字母的大小写,即“Fi_er”与“filer”、“Fixer”以及“fiber”匹配。重要提示:如果 input2 中没有任何单词可以替代 input1,则输出字符串应包含字符串“ERROR-009” 假设:
Input1 将仅包含一个单词,其中仅 1 个字符被下划线“_”替换 Input2 将包含一系列用冒号分隔的单词 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;
}
}
但是一些隐藏的测试用例没有通过。问题可能出在哪里。
我从网上找到了一个通过所有测试用例的代码。请参阅此链接。
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();
}
}
您可以在此处找到上述实现的示例运行。
推荐阅读
- android - 如何将 POST 请求从 Android 发送到 Elasticsearch
- c++ - OpenGL三角形总是白色的
- c++ - 表达式必须是 C++ 中的整数或无范围枚举类型?
- android - W/BiChannelGoogleApi:[FirebaseAuth:] getGoogleApiForMethod() 返回 Gms:com.google.firebase.auth.api.internal.zzal@5680b5b
- reactjs - 如何提高测试覆盖率 Jest, Enzyme
- html - 是否可以绕过使用所需属性、模式等的 html 验证
- jmeter - 如何在Jmeter中为非gui分布式负载测试传递堆参数?
- python - 如何在张量流中重用占位符?
- postgresql - 将行从主表移动到具有外键约束的子表
- vba - 从 PST 导入日历/联系人 - Outlook VBA