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; } }