題目
設定兩個字串s1和s2,要求判定s2是否能夠被s1做迴圈位移(rotate)得到的字串包含。例如給定s1=」aabcd」,s2=」bcdaa」,返回true;給定s1=」abcd」,s2=」acbd」,返回false。
分析
我們可以對迴圈位移之後的結果進行分析:
以s1為=「abcd」為例,先分析對s1進行迴圈位移之後的結果,如下所示:
abcd->bcda->cdab->dabc->abcd…
假設我們把前面移走的資料進行保留,會發現有如下規律:
abcd->abcda->abcdab->abcdabc->abcdabcd…
可以看出,對s1做迴圈移位所得到的字串都將是字串s1s1的子串。如果s2可由s1迴圈移位得到,那麼s2一定是s1s1的子串。
c++**
#include
#include
using
namespace
std;
bool isrotate(string s1, string s2)
int main()
參考
string::find - c++ reference
我們用到成員函式:
size_t find (const string& str, size_t pos = 0) const noexcept;
(1)parameters(引數)
(2)return value(返回值)
the position of the first character of the first match.
if no matches were found, the function returns string::npos.
返回搜尋到的字串在本字串中第乙個字元的位置,如果沒有搜尋到,則返回string::npos(static const size_t npos = -1;)。
字串包含問題
字串包含問題 判斷小字串的所有字元是否大字串都有 思路一 針對小字串的每乙個字元一一與大字串的字元輪詢比較即可,很明顯時間複雜度為o n m bool compare string s1,string s2 if j s2.length return true 思路二 對兩個字串分別排序,同時依次輪...
字串包含問題
假設這有乙個各種字母組成的字串a,和另外乙個字串b,字串裡b的字母數相對少一些。什麼方法能最快的查出所有小字串b裡的字母在大字串a裡都有?比如,如果是下面兩個字串 string 1 abcdefghlmnopqrs string 2 dcgsrqpo 答案是true,所有在string2裡的字母st...
字串包含問題
兩個字串s1和s2,假設s1長度大於等於s2長度,判斷s2是否為s1的乙個子集。例如 s1 abcdefghi,s2 acefg,由於s2中的每個元素都出現在s1中,說明s1包含s2.若s2 acefgk,由於k不在s1中,因此s1不包含s2。設s1長度為m,s2長度為n 方法1 brute for...