驼峰案例列表: [' HelloMars',' HelloWorld',' HelloWorldMars',' HiHo']
测试用例:
这是我尝试过的:
private static List<String> findMatchingCamel(String patter){
List<String> result=new ArrayList<String>();
List<String> myData=Arrays.asList("HelloMars","HelloWorld","HelloWorldMars","HiHo");
String[] upperCasePattern=splitBasedOnUpperCaseLetter(patter);
for(String str1:myData){
boolean found=true;
for(String s:upperCasePattern){
if(str1.indexOf(s)==-1)
{
found=false;
break;
}
}
if(found)
result.add(str1);
}
return result;
}
private static String[] splitBasedOnUpperCaseLetter(String str){
String[] result=str.split("(?=[A-Z])");
return result;
}
我的函数不处理案例,例如当模式是Ho时它正在返回HiHo。我怎样才能改善它;修复bug并尽可能在最短时间内返回结果?
答案 0 :(得分:0)
您需要检查单词是否符合数据的顺序,所以
private static List<String> findMatchingCamel(String patter){
List<String> result=new ArrayList<String>();
// Split the data on UpperCase too
List<String[]> myData=Arrays.asList(
splitBasedOnUpperCaseLetter("HelloMars"),
splitBasedOnUpperCaseLetter("HelloWorld"),
splitBasedOnUpperCaseLetter("HelloWorldMars"),
splitBasedOnUpperCaseLetter("HiHo")
);
String[] upperCasePattern = splitBasedOnUpperCaseLetter(patter);
for(String[] str1:myData){
boolean valid = true;
if(upperCasePattern.length() <= str1.length())
// For the UpperCase splits length
for(int i=0; i<upperCasePattern.length(); i++){
// If string do not match the start of the data
if(!upperCasePattern[i].equals(str1[i].substring(0,upperCasePattern[i].length())){
// Go on the next data
valid = false;
break;
}
}
if(valid)
result.add(str1.toString());
}
}
return result;
}
答案 1 :(得分:0)
在以下条件中,检查字符串
中是否存在模式for(String s:upperCasePattern){
if(str1.indexOf(s)==-1)
{
found=false;
break;
}
}
但是模式应该按照给定的顺序给出。你可以做的是你可以分割myData中的每个字符串,类似于模式。然后尝试匹配两个字符串数组。如果模式存在于myData的分割字符串数组中,则与upperCasePattern具有相同的索引。代码可能如下所示:
for(String str1:myData){
String[] upperCaseMyData = splitBasedOnUpperCaseLetter(str1);
boolean found=true;int length = 0;
if(upperCaseMyData.length<upperCasePatter.length)
{
length = upperCaseMyData.length;
}
else
{
length = upperCasePatter.length;
}
for(int i=0;i<length;i++)
{
if(upperCaseMyData[i].indexOf(upperCasePatter[i])==-1)
{
found=false;
break;
}
}
if(found)
result.add(str1);
}