python,Java,JavaScript實現indexOf
簡介
最近做項目的時候,發(fā)現無論是前端還是后端,indexOf出現的概率都非常頻繁,今天我們來看下他的實現原理吧!
indexOf的含義:給定一個字符串去匹配另一個字符串的下標,如果匹配到,返回下標,如果匹配不到則返回-1,其實原理還是比較簡單的,如果需要你實現,那么應該怎么做呢?
原理
現在給定匹配的字符串A,原始字符串B,比如匹配字符串A等于“叫練”,原始字符串B等于“邊叫邊練,我喜歡叫練”,你可能一眼就發(fā)現“叫練”是最后兩個字符,我們以B做循環(huán),一個一個單詞去匹配,先找“叫”,找到計數器加1,然后繼續(xù)找“練”,發(fā)現下個字符不是“練”,計數器清零,重新從“叫”開始查找,現在查找到B的倒數第二個字符了,下個字符是“練”計算器再加1,此時計數器等于2也正好是A字符串的長度,說明找到了,查找原理就是這樣一個過程;下面我們分別以Java,javascript,python方式實現下。
注意:下面代碼沒有校驗,僅供參考,python是index方法,實現原理一樣,但找不到會報錯!
實現
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++;
//如果匹配到“叫”,繼續(xù)向下開始匹配“練”
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實現
/**
* @param orgin 原始字符串 B = “邊叫邊練,我喜歡叫練”;
* @param serachString 匹配字符串 A=“叫練”
**/
function indexOf(orgin,serachString) {
//返回字符串下標
var index = -1;
//匹配字符串計數器,用于查詢是否匹配到完整字符串
var s_index = 0;
//全局計數器,用于計算下標
var move = 0;
for (var i=0; i<orgin.length; i++) {
move++;
//如果匹配到“叫”,繼續(xù)向下開始匹配“練”
if (orgin.substr(i,1) == serachString.substr(s_index,1)) {
s_index++;
if(s_index == serachString.length) {
index = move-serachString.length;
break;
}
} else {
s_index = 0;
}
}
return index;
}
python實現
# indexOf 算法原理
# @param orgin 原始字符串 B = “邊叫邊練,我喜歡叫練”;
# @param serachString 匹配字符串 A=“叫練”
# @return int 下標
def index(orgin, serachString):
# 返回字符串下標
index = -1
# 匹配字符串計數器,用于查詢是否匹配到完整字符串
s_index = 0
# 全局計數器,用于計算下標
move = 0
for letter in enumerate(orgin):
move = move + 1
# 如果匹配到“叫”,繼續(xù)向下開始匹配“練”
if letter[1] == serachString[s_index]:
s_index = s_index + 1
if s_index == len(serachString):
index = move - len(serachString)
break
else:
s_index = 0;
return index
以上就是python,Java,JavaScript實現indexOf的詳細內容,更多關于indexOf的資料請關注腳本之家其它相關文章!

