算法串匹配

Posted 猫咪大王

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法串匹配相关的知识,希望对你有一定的参考价值。

package com.lkb.demo.test;

public class StringTest {
    
    public static void main(String[] args) {
        StringTest test = new StringTest();
        char[] src = {‘c‘,‘d‘,‘d‘,‘c‘,‘d‘,‘c‘};
        char[] target = {‘c‘,‘d‘,‘c‘};
        int index = test.getIndex(src, target);
        System.out.println(index);
        int index2 = test.getIndexByBF(src, target);
        System.out.println(index2);
    }
    
    /**
     * String.indexOf(String str)的原理
     * 串与串之间的比较
     * 1、先找子串的头在目标串中匹配的位置
     * 2、如果找到,再接着比较
     * 3、如果没找到,接着找,知道找遍主串
     * @param src
     * @param target
     * @return
     */
    public int getIndex(char[] src, char[] target){
        char begin = target[0]; //
        int index = -1;
        for(int i=0;i<src.length;i++){
            
            if(src[i] == begin){//找到头
                int beginIndex = i;
                int j = 0;
                while( j < target.length && beginIndex < src.length){
                    if(src[beginIndex] == target[j]){
                        beginIndex++;
                        j++;
                    }
                    else 
                        break;
                }
                if(j == target.length)
                    return (index = i);
            }
        }        
        return index;
    }
    
    /**
     * Brute-Force 暴力匹配
     * 每个字符一一匹配
     * @param src
     * @param target
     * @return
     */
    public int getIndexByBF(char[] src, char[] target){
        int index = -1;
        for(int i=0;i<src.length;){
            int j;
            for(j=0;j<target.length;){
                if (src[i] == target[j]) {//字符匹配
                    i++;
                    j++;
                }else{
                    i++;
                    break;
                }
            }
            if(j == target.length)
                index = i - j;
        }
        
        return index;
    }
    
}

 

以上是关于算法串匹配的主要内容,如果未能解决你的问题,请参考以下文章

字符串模式匹配KMP算法

KMP(字符串匹配算法)

字符串的模式匹配算法

数据结构-串的模式匹配

字符串匹配(KMP 算法 含代码)

数据结构(c++)字符串 模式匹配算法问题,对高手来说只要写一点点