1题:给定一个 query 和一个 text,均由小写字母组成。要求在 text 中找出以同样的顺序连 续出现在 query 中的最长连续字母序列的长度。例如, query 为“acbac”,text 为 “acaccbabb”,那么 text 中的“cba”为最长的连续出现在 query 中的字母序列,因此, 返回结果应该为其长度 3。请注意程序效率。
算法描述:
/*
*通过判断query子串是否为text子中的前缀,
* 比较已知最长串长度和前缀的长度;
如下:
*外循环, text串每次去掉第一个字符:
* 第二层循环,指针j从query第一个字符开始扫描,
* 第三层循环,指针K从query最后一个字符开始向前:直到遇到指针j;
* 判断指针J到K中间的子串是否为 当前text子串的前缀,
* 若是,则计算长度,并与已知最长度比较,更新已知长度
时间复杂度:text长度*query长度
*/
public class QuesitionAliA {
public static void main(String[] args) {
String query="acbac";
String text="acaccbabb";
int result=functionFind(query,text);
System.out.println(result);
}
public static int functionFind(String query,String text){
int result=0;
for(int i=0;i<text.length();i++){
for(int j=0;j<query.length();j++){
for(int k=query.length();k>j;k--){
if(text.substring(i).startsWith(query.substring(j,k))){
result = result>(k-j) ? result:(k-j);
}
}
}
}
return result;
}
}