关注
KMP算法
【题目】
给定两个字符串str和match,长度分别为N和M。实现一个算法,如果字符串str中含有字串match,则返回match在str中的开始位置,不含有则返回-1。
【举例】
str=“acbc”,match=“bc”。返回2。
str=“acbc”,match=“bcc”。返回-1。
【要求】
如果match的长度大于str长度(M>N),str必然不会含有match,可直接返回-1。但如果N>=M,要求算法复杂度O(N)。
public int getIndexOf(String s, String m) {
if (s == null || m == null || m.length() < 1 || s.length()
< m.length()) {
return -1;
}
char[] ss = s.toCharArray();
char[] ms = m.toCharArray();
int si = 0;
int mi = 0;
int[] next = getNextArray(ms);
while (si < ss.length && mi < ms.length) {
if (ss[si] == ms[mi]) {
si++;
mi++;
} else if (next[mi] == -1) {
si++;
} else {
mi = next[mi];
}
}
return mi == ms.length ? si - mi : -1;
}
public int[] getNextArray(char[] ms) {
if (ms.length == 1) {
return new int[] { -1 };
}
int[] next = new int[ms.length];
next[0] = -1;
next[1] = 0;
int pos = 2;
int cn = 0;
while (pos < next.length) {
if (ms[pos - 1] == ms[cn]) {
next[pos++] = ++cn;
} else if (cn > 0) {
cn = next[cn];
} else {
next[pos++] = 0;
}
}
return next;
}
查看原帖
点赞 评论
相关推荐
04-22 20:38
中国矿业大学 计算机类 点赞 评论 收藏
转发
点赞 评论 收藏
转发
点赞 评论 收藏
转发
牛客热帖
- 1... 想来字节技术实习,看我这篇就够了!——保姆级面经大放送1.8W
- 2... 外卖员面试经验1.5W
- 3... 25届第一份实习怎么找?1.4W
- 4... 0实习经验上岸字节,分享一下过程经验1.3W
- 5... 【0429快问快答】99%牛油的疑惑解答(更新至38个问题1.1W
- 6... 【奖】休息放松or学习提升,五一假期和牛牛一起“充充电”🔋1.1W
- 7... 准备去参加自己的婚礼9111
- 8... 美团后端日常实习一二面(已oc)7428
- 9... 【💰有奖征集】非技术岗位笔面经邀你来分享!攒人品时间到!6481
- 10... 阿里国际 笔试 04295036
正在热议
# 牛友的五一计划 #
16196次浏览 343人参与
# 晒一晒我的offer #
2824204次浏览 49929人参与
# 牛客帮帮团来啦!有问必答 #
397331次浏览 7809人参与
# 如何看待offer收割机的行为 #
194039次浏览 2986人参与
# 无实习如何秋招上岸 #
172735次浏览 2720人参与
# 如何一边实习一边秋招 #
201316次浏览 3994人参与
# 春招别灰心,我们一人来一句鼓励 #
21263次浏览 309人参与
# 非技术岗薪资爆料 #
8355次浏览 152人参与
# 硬件人的春招flag #
14548次浏览 199人参与
# 女生做医疗销售有前景吗 #
3861次浏览 49人参与
# 字节跳动工作体验 #
53335次浏览 1541人参与
# 聊聊这家公司值得去吗 #
63117次浏览 1241人参与
# 第一次面试 #
17406次浏览 267人参与
# 在国企工作的人,躺平了吗? #
72860次浏览 881人参与
# 来聊聊机械薪资天花板是哪家 #
22634次浏览 178人参与
# 机械人,你的秋招第一份简历被谁挂了 #
26969次浏览 491人参与
# 你更愿意参加线上面试还是线下面试? #
6925次浏览 94人参与
# 华为求职进展汇总 #
441917次浏览 4436人参与
# 如何KTV领导 #
7516次浏览 72人参与
# 机械制造2024笔面经 #
278816次浏览 4668人参与