indexOf原理,Java,javascript,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
亚马逊测评 www.yisuping.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值