sunday算法是个特别容易记和理解的算法,但是我看网上很多博客都写错了。所以整理了一下,
防止自己遗忘,sunday算法的原理很简单。
1. 匹配,然后出现不匹配的时候,看主串最后一个元素的下一个元素,从右往左(为什么从右往左)检查子串是否包含(为什么要这样)
为什么从右往左:因为下一个如果匹配的子串,第一个肯定先和最右边的那个i对应上,这样就跳过了好多。
2.重新对上以后,再重复一步骤,是不是很简单,但是代码可不简单。
代码:难点是位置的坐标很容易混,有个好记的办法就是,没有常数+1或者-1
class Solution { public int strStr(String haystack, String needle) { if(haystack!=null&&needle.equals("")) return 0; int x=0; int j=0; while(x<haystack.length()&&j<needle.length()) { int num=0; while(x+num<haystack.length()&&num<needle.length()&&haystack.charAt(x+num)==needle.charAt(num)) { num++; } if(num==needle.length()) return x; char p=' '; if(x+needle.length()<haystack.length()) p=haystack.charAt(x+needle.length()); int loc=needle.lastIndexOf(p); if(loc==-1) x=x+needle.length(); else { x=x+needle.length()-loc; } } return -1; } }