字符串匹配1

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;
  }
}

 

posted on 2015-08-14 16:57  dan-cnblogs  阅读(209)  评论(0)    收藏  举报