《Cracking the Coding Interview程式設計師面試金典》----翻轉子串

塵封的記憶0發表於2017-04-19
時間限制:3秒 空間限制:32768K 熱度指數:3626
本題知識點: 程式設計基礎 字串
 演算法知識視訊講解

題目描述

假定我們都知道非常高效的演算法來檢查一個單詞是否為其他字串的子串。請將這個演算法編寫成一個函式,給定兩個字串s1和s2,請編寫程式碼檢查s2是否為s1旋轉而成,要求只能呼叫一次檢查子串的函式。

給定兩個字串s1,s2,請返回bool值代表s2是否由s1旋轉而成。字串中字元為英文字母和空格,區分大小寫,字串長度小於等於1000。

測試樣例:
"Hello world","worldhello "
返回:false
"waterbottle","erbottlewat"

返回:true


解題思路:主要的思想:因為字串是翻轉過的,但是除了翻轉點之外,其餘的字母都是保留了原有的順序,因此,我們假設xy為原串,那麼翻轉後的結果為yx,那麼要證明yx是否由xy翻轉過來?必然有yx是xyxy的子串,只要符合這點就可以知道yx由xy翻轉過來

 bool checkReverseEqual(string s1, string s2) {
        string temp=s1+s1;
        int lenOfs2=s2.size();
        int lenOftemp=temp.size();
        for(int i=0;i<lenOftemp-lenOfs2;i++)
        {
            string s3=temp.substr(i,lenOfs2);
            if(s3==s2) return true;
        }
        return false;
    }

不懂的可以加我的QQ群:261035036(IT程式設計師面試寶典

群) 歡迎你到來哦,看了博文給點腳印唄,謝謝啦~~


相關文章