
关注
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;
}
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享
03-11 02:16
武汉生物工程学院 Java 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 设计人如何选offer #
98202次浏览 687人参与
# 找工作,行业重要还是岗位重要? #
7356次浏览 96人参与
# 五一之后,实习真的很难找吗? #
45110次浏览 320人参与
# 盲审过后你想做什么? #
12524次浏览 113人参与
# 外包能不能当跳板? #
22128次浏览 191人参与
# 领导秒批的请假话术 #
9793次浏览 74人参与
# 考研可以缓解求职焦虑吗 #
20869次浏览 247人参与
# 五一假期,你打算“躺”还是“卷”? #
28370次浏览 416人参与
# 找工作前vs找工作后的心路变化 #
7163次浏览 64人参与
# 硬件人,你被哪些公司给挂了 #
46601次浏览 722人参与
# 面试等了一周没回复,还有戏吗 #
115481次浏览 1074人参与
# 大疆的机械笔试比去年难吗 #
69584次浏览 603人参与
# 应届生薪资多少才合理? #
3079次浏览 24人参与
# 牛友们的论文几号送审 #
27200次浏览 623人参与
# 写简历别走弯路 #
714288次浏览 7850人参与
# 你喜欢工作还是上学 #
37526次浏览 411人参与
# 如果有时光机,你最想去到哪个年纪? #
43256次浏览 766人参与
# 如何缓解入职前的焦虑 #
171894次浏览 1267人参与
# 如果不工作真的会快乐吗 #
101079次浏览 866人参与
# 每人推荐一个小而美的高薪公司 #
72835次浏览 1357人参与