子字符串查找(算法四)

测试主方法

public static void main(String[] args){
        String pat="fg";
        String txt="faauedfasffsjjafkjfsdfdffsafsdfsafdsssssssssssafasdfsdadfsafegrgsdfasaaffgfai";
        System.out.println(search(pat,txt));
    }

暴力法

public static int searchOne(String pat,String txt){
        int m=pat.length();
        int n=txt.length();
        for(int i=0;i<=n-m;i++){
            //母字符串指针循环0到n-m
            int j;
            for(j=0;j<m;j++){
                //子字符串循环0到m-1
                if(txt.charAt(i+j)!=pat.charAt(j)){
                    //只要有一个字符不同,跳出循环,从母字符串的下一个字符重新开始
                    break;
                }
            }
            if(j==m){
                //说明子字符串所有字符都匹配
                return i;
            }
        }
        return n;
    }

    /** * * @param pat * @param txt * @return the matching location */
    public static int searchTwo(String pat,String txt){
        int i,m=pat.length();
        int j,n=txt.length();
        for(i=0,j=0;i<n && j<m;i++){
            //i递增
            if(txt.charAt(i)==pat.charAt(j)){
                //匹配 j才增加
                j++;
            }
            //不匹配
            else{
                //i回退后 for循环再+1
                i-=j;
                j=0;
            }
        }
        if(j==m){
            //暴力法一 i不会回退
            return i-m;
        }
        else{
            return n;
        }
    }
    原文作者:查找算法
    原文地址: https://blog.csdn.net/westbrook1998/article/details/79349591
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞