模式匹配——Sunday算法
Posted 小丫头い
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模式匹配——Sunday算法相关的知识,希望对你有一定的参考价值。
- 今天看到一个新的模式串匹配算法,比我在课堂上学的那个KMP简单多了,而且很好理解啊,就是写的时候要特别注意索引的变化,千万不能写错哟!
public class Solution
public int strStr(String haystack, String needle)
if(haystack==null||haystack.length()<needle.length())
return -1;
if(haystack.length()==0||needle.length()==0)
return 0;
int i = 0;
int j = 0;
while(i<haystack.length())
if(haystack.charAt(i)==needle.charAt(j)) //先进行匹配,若匹配成功,则两指针向后移动
i++;
j++;
else //我们把模式串在文本串上滑动
int index = i+needle.length()-j; //匹配不成功,则获取当前文本串中对应于整个模式串的下一位
int occure;
if(index>=haystack.length()) //当然这里要判断一下下一位是否存在
return -1;
else
occure = needle.lastIndexOf(haystack.charAt(index)); //然后再判断这个字符在模式串中的位置,一定要注意是lastIndexOf
if(occure==-1)
i = index + 1;
else
i = index -occure; //将整个模式串滑动至cooure正好与index元素对应
j = 0; //此时模式串回到最前面
if(j==needle.length()) //如果模式串已经匹配完,则返回匹配成功的初始位置
return i-needle.length();
return -1;
- 重点是两个移动:若下一位不在模式串中,则i直接移动到Index的下一位,若下一位在模式串中的occure,则i移动到Index-occure的位置(保证index元素和模式串中occure元素对齐)。并且注意找occure时是反向找的,嗯,就酱紫。
以上是关于模式匹配——Sunday算法的主要内容,如果未能解决你的问题,请参考以下文章