字符串匹配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;
  }
}

 

转载于:https://www.cnblogs.com/dan-cnblogs/p/4730525.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值