indexOf原理,Java,javascript,python实现

 

简介


  最近作项目的时候,发现不管是前端仍是后端,indexOf出现的几率都很是频繁,今天咱们来看下他的实现原理吧!javascript

  indexOf的含义给定一个字符串去匹配另外一个字符串的下标,若是匹配到,返回下标,若是匹配不到则返回-1,其实原理仍是比较简单的,若是须要你实现,那么应该怎么作呢?前端

 

原理


  如今给定匹配的字符串A,原始字符串B,好比匹配字符串A等于“叫练”原始字符串B等于“边叫边练,我喜欢叫练”,你可能一眼就发现“叫练”是最后两个字符,咱们以B作循环,一个一个单词去匹配,先找“叫”,找到计数器加1,而后继续找“练”,发现下个字符不是“练”,计数器清零,从新从“叫”开始查找,如今查找到B的倒数第二个字符了,下个字符是“练”计算器再加1,此时计数器等于2也正好是A字符串的长度,说明找到了,查找原理就是这样一个过程;下面咱们分别以Java,javascript,python方式实现下。java

  注意:下面代码没有校验,仅供参考,python是index方法,实现原理同样,但找不到会报错!python

 

实现


Java实现

public static void main(String[] args) {
        String orgin = "边叫边练,我喜欢叫练";
        String serach = "叫练";
        int index = indexOf(orgin,serach);
        System.out.println(index);
    }

/**
     *  indexOf 算法原理
     * @param orgin 原始字符串 B = “边叫边练,我喜欢叫练”;
     * @param serachString 匹配字符串 A=“叫练”
     * @return int 下标
     */
public static int indexOf(String orgin,String serachString) {
    char[] chars = orgin.toCharArray();
    char[] sChars = serachString.toCharArray();
    //返回字符串下标
    int index = -1;
    //匹配字符串计数器,用于查询是否匹配到完整字符串
    int s_index = 0;
    //全局计数器,用于计算下标
    int move = 0;
    for (int i=0; i<chars.length; i++) {
        move++;
        //若是匹配到“叫”,继续向下开始匹配“练”
        if (chars[i] == sChars[s_index]) {
            s_index++;
            if(s_index == sChars.length) {
                index = move-sChars.length;
                break;
            }
        } else {
            s_index = 0;
        }
    }
    return index;
}

 

Javascript实现

 1 /**
 2      * @param orgin 原始字符串 B = “边叫边练,我喜欢叫练”;
 3      * @param serachString 匹配字符串 A=“叫练”
 4      **/
 5     function indexOf(orgin,serachString) {
 6         //返回字符串下标
 7         var index = -1;
 8         //匹配字符串计数器,用于查询是否匹配到完整字符串
 9         var s_index = 0;
10         //全局计数器,用于计算下标
11         var move = 0;
12         for (var i=0; i<orgin.length; i++) {
13             move++;
14             //若是匹配到“叫”,继续向下开始匹配“练”
15             if (orgin.substr(i,1) == serachString.substr(s_index,1)) {
16                 s_index++;
17                 if(s_index == serachString.length) {
18                     index = move-serachString.length;
19                     break;
20                 }
21             } else {
22                 s_index = 0;
23             }
24         }
25         return index;
26     }

 

python实现

 1 # indexOf 算法原理
 2 # @param orgin 原始字符串 B = “边叫边练,我喜欢叫练”;
 3 # @param serachString 匹配字符串 A=“叫练”
 4 # @return int 下标
 5 def index(orgin, serachString):
 6     # 返回字符串下标
 7     index = -1
 8     # 匹配字符串计数器,用于查询是否匹配到完整字符串
 9     s_index = 0
10     # 全局计数器,用于计算下标
11     move = 0
12     for letter in enumerate(orgin):
13         move = move + 1
14         # 若是匹配到“叫”,继续向下开始匹配“练”
15         if letter[1] == serachString[s_index]:
16             s_index = s_index + 1
17             if s_index == len(serachString):
18                 index = move - len(serachString)
19                 break
20         else:
21             s_index = 0;
22 
23     return index
相关文章
相关标签/搜索