sunday算法


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM