最近工作比较忙, 不怎么有时间来更新公众号文章. 刚松手, 就想来搞一篇. 所以这篇文章搬运来自自己博客中的文章
正文如下
今天周末,出租屋无聊便来公司呆着。顺便看看Sunday
算法 Sunday
算法的查找匹配速率比KMP
算法快,其匹配规则也简单易懂.
其移动位数主要时参考与字符串中参加匹配的最末位字符的下一位字符,如果该字符并未在搜索串中出现,则将字符串指针移动到该字符的下一位字符,搜索串指针则归零,反之,如果参加匹配的最末位字符的下一位字符出现在搜索串中,则移动位数等于搜索串长度减去搜索串中第一次出现该字符的下标。
详情看末尾的引用,同样也谢谢这两篇文章的作者
public int sundaySearchStrByStr(String strTotal, String strSearch) {
char charTotal [] = strTotal.toCharArray();
char charSearch [] = strSearch.toCharArray();
int t = 0;
int s = 0;
int existCount = 0;
while(s < charSearch.length && t < charTotal.length) {
if(charSearch[s] == charTotal[t]) {
if((s + 1) != charSearch.length) {
s++;
t++;
}else {
existCount++;
if(charTotal.length - (t + 1) >= charSearch.length) {
s = 0;
t++;
}else {
break;
}
}
}else {
int num = t + charSearch.length;
int index = -1;
if(num < charTotal.length) {
for(int i = 0; i < charSearch.length; i++) {
if(charTotal[num] == charSearch[i]) {
index = i;
break;
}
}
if(index != -1) {
t = t + (charSearch.length - index);
s = 0;
}else {
t = num + 1;
s = 0;
}
}else {
break;
}
}
if(t >= charTotal.length) {
break;
}
}
return existCount;
}
整个Sunday
算法的核心代码即while
循环里面的代码,这里主要需注意字符串指针移动时的溢出问题,添加的条件即代码中的num < charTotal.length
,满足此条件才能进行下一步,否则则跳出循环 另外,Sunday
算法在while
循环中多了一部for
循环,其做的就是将那下一个字符与搜索串进行匹配,如果第一次就匹配成功,即break
就拿之前写的KMP
算法代码来对比
KMP算法
Sunday算法
所以总体来说,Sunday
较KMP
来说匹配速率更快,代码实现也更简单
首发来自公众号: 程序员品
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。