Python、Java与JavaScript实现indexOf算法原理详解
本文深入解析indexOf函数的核心原理,即通过遍历原始字符串并逐字符比对来定位子串下标。文章分别使用Java、JavaScript和Python三种语言实现了该算法,展示了从字符计数到索引返回的完整逻辑,适用于前后端开发场景下的字符串处理需求。
简介
简介
在近期的项目开发中,无论是前端还是后端代码,indexOf的使用频率都极高。本文将深入探讨其背后的实现原理。
indexOf的功能是:在一个字符串中查找另一个子串首次出现的位置。若找到,返回对应的下标;若未找到,则返回-1。其核心逻辑并不复杂,下面我们将探讨如何手动实现这一功能。
原理
原理
假设匹配字符串A为“叫练”,原始字符串B为“边叫边练,我喜欢叫练”。直观上看,“叫练”位于B的末尾。算法执行时,以B为循环主体,逐个字符进行比对。首先查找字符“叫”,一旦匹配成功,计数器加1;接着继续查找下一个字符“练”。若后续字符不是“练”,则计数器清零,并从B的起始位置重新尝试查找“叫”。当在B的倒数第二个字符处再次匹配到“叫”,计数器加1后,紧接着匹配到“练”,此时计数器达到2,恰好等于字符串A的长度,表明匹配成功。整个查找过程即基于这种逐字符比对与计数器重置的机制。接下来,我们将分别使用Java、JavaScript和Python语言来实现这一逻辑。
注意:以下代码未包含边界校验,仅供原理参考。Python中对应的index方法实现原理相同,但区别在于若未找到匹配项,Python会直接抛出异常而非返回-1。
代码实现
实现
Java实现
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实现
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++;
//如果匹配到“叫”,继续向下开始匹配“练”
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实现
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
# 如果匹配到“叫”,继续向下开始匹配“练”
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的资料,请继续关注本站其他相关文章。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









