public static void main(String[] args){
String[] words = {"apple", "apples", "bananaaple", "orangebanana", "pearapples"};
String key = "apple";
System.out.println(expanding(words,key));
}
public static boolean expanding(String[] words, String key){
if(key.length()<1){
return false;
}
for(int i=1; i<=key.length(); i++){
String sub = key.substring(0, i);
boolean found =search(words,sub,0,words.length-1);
if(found){ //get next piece
String theSubString =key.substring(i, key.length());
if(theSubString.compareToIgnoreCase("")==0){
return found;
}
boolean re = expanding(words,theSubString );
if(re)
return true;
}
}
return false;
}
public static boolean search(String[] list, String key, int min, int max){
if(min>max){
return false;
}
int mid = (min+max)/2;
if(list[mid].compareToIgnoreCase(key)==0){
return true;
}else if(list[mid].compareToIgnoreCase(key)<0){
return search(list,key,mid+1,max);
}else{
return search(list,key,min,mid-1);
}
}
在我看来最好的情况应该是O(log n),但不确定最坏的情况...也许O(n^2)一次只能匹配一个字母。
谁能给我更多的点子吗?
基本上,你提出的方法是一个递归搜索和回溯。它应该能正常工作,但应该存在能使你的算法在指数时间内运行的输入。
也许令人惊讶的是,使用正则表达式可以在线性时间内解决您的问题。在您的示例中,我们将测试正则表达式/(appleapplesbananaapleorangebananapearapples)*/
是否与密钥匹配。
在自动机理论中研究了字符串与正则表达式的匹配问题,该问题可以用线性时间内的非确定性有限自动机来解决。
我有一个程序,它接受一个单词和一个文本文件字典,并在字典中搜索与给定单词相等的单词组合(是字母表)。 我最后得到了一个字符串数组的Arraylist,每个数组都是一个包含它所使用的单词的解决方案,Arraylist是所有的解决方案。 它首先按字长(降序)排序,然后对等长字使用字母排序。 我现在对各个数组进行了排序,但我正试图按照某些规则在arraylist中对它们进行排序: 按字数递增 对于包含相
问题内容: 我有一个数组 并且需要对其进行排序,使其看起来像; 我尝试了排序功能; 但这给出了命令 我试图考虑一个正则表达式可以正常工作,但无法解决这个问题。 如果有帮助,格式将始终为2个字母,x个数字,然后是任意数量的字符。 问题答案: 这称为“自然排序”,可以像这样在JS中实现: 要以相反的顺序排序,只需交换参数即可: 或简单地
我有一个数组: 如何根据数组中每个元素中包含的数字对数组进行排序?
我正在玩排序数组,我弄清楚了如何对int数组进行合并排序。但是我不知道合并字符串数组。在正常排序时,对字符串数组进行排序很容易,但合并排序不同。我到目前为止所做的代码如下,正在处理int数组。
我试图计算每个字符串中的元音,我想根据count变量交换字符串,但我做不到。在接受字符串后,我用toCharArray()函数将其转换为char数组,并将每个字符与小写和大写元音进行比较。 我收到一个错误。编写代码部分的任何帮助都将不胜感激。 输入: 输出:
问题内容: 我有一个包含多个数组的数组,我想根据这些数组中的某个字符串对数组进行排序。 如何按名称排序,以便 阿尔伯特排 在首位, 齐默尔曼排 在最后? 我知道如果可以使用整数进行排序,但是字符串使我毫无头绪,该怎么办。 谢谢您帮忙!:) 问题答案: 这可以通过将支持函数作为参数传递给方法调用来实现。 像这样: