Java实现算法导论中朴素字符串匹配算法

153 篇文章 2 订阅
60 篇文章 48 订阅

朴素字符串匹配算法沿着主串滑动子串来循环匹配,算法时间性能是O((n-m+1)m),n是主串长度,m是字串长度,结合算法导论中来理解,具体代码参考:

package cn.ansj;

public class NavieStringMatcher {
	public static void main(String[] args) {  
        String T = "欢迎访问fjssharpsword博客,致力于大数据应用解决方案提供!";  
        String P = "大数据应用解决方案";  
        NavieStringMatcher  nsm = new NavieStringMatcher();  
        int index = nsm.stringMatcher(T, P);  
        System.out.println("有效位移是: "+index);  
    }  
    /** 
     * @author fjssharpsword  
     * @param T 主字符串 
     * @param P 模式字符串 
     * @return s 有效位移
     */  
    public int stringMatcher(String T, String P){  
        int iTLen = T.length();  
        int iPLen = P.length();  
        // 从主串开始比较  
        for(int i=0; i<iTLen; i++) {  
            int k = i; // k指向主串下一个位置  
            for(int j=0; j<iPLen; j++) {  
                if(T.charAt(k) != P.charAt(j)) {  
                    break;  
                }else {  
                    k++;// 指向主串下一个位置  
                    if(j == iPLen-1) {  
                        return i;  
                    }  
                }                     
            }  
        }          
        return -1;  // 匹配不成功,返回-1 
    }  
}
执行结果:

有效位移是: 23



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值