字串移位包含的問題(程式設計之美)
問題:給定兩個字串s1和s2,要求判斷s2是否能夠被通過s1做迴圈移位(rotate)得到的字串包含。例如,S1=AABCD和s2=CDAA,返回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上,這樣時間複雜度就降低了。
相關推薦
字串移位包含的問題(程式設計之美)
問題:給定兩個字串s1和s2,要求判斷s2是否能夠被通過s1做迴圈移位(rotate)得到的字串包含。例如,S1=AABCD和s2=CDAA,返回true;給定s1=ABCD和s2=ACBD,返回false。 我們也可以對迴圈移位之後的結果進行分析。 以S1 = A
階乘的一些規律(程式設計之美)
問題一: N!末尾有多少個0? 問題二: N!二進位制表示中最低位1的位置? 首先來介紹幾個要點和規律: n! = n(n - 1)! (n > 0) n! = 1 (n = 0) 這裡注意不要忘了 問題一等價轉化 <=> N! 的質因數
JAVA控制CPU佔用率(程式設計之美有感)(二)
JAVA控制CPU佔用率(程式設計之美有感)(二) 繼續上次的電腦CPU控制,很遺憾更新的有點慢,雖然我知道沒人看,最近專案上任務有點多,所以時間少了點,不過我是達不到目的是不會放棄的! 上次勉強能達到有點類似於直線的CPU佔用率控制圖,但是這只是所有CP
程式設計之美 3.1字串移位包含的問題
題目: 給定兩個字串s1和s2,要求判定s2是否能偶被s1做迴圈移位得到的字串包含,例如:給定s1=AABCD s2=CDAA,返回true;給定s1=ABCD 和s2=ACBD,返回false 法一: 將s1依次移動1位,2位....s1.length()位 判斷s2在不
程式設計之美—字串移位包含問題
驗證字串s2通過移位能否包含字串s1。 (1)逐一移位,驗證是否包含 (2)只需驗證s2s2是否包含s1即可。 s2每隔strlen(s2)次移位後又回到s2,相當於移位後的字串在 s2~s2s2之間。 程式碼實現如下: // stringContain.cpp : 定義
[程式設計之美3.1]字串移位包含的問題
題目:給定字串s1和s2,要求判定s2是否能夠被s1做迴圈移位得到的字串包含。例如給定s1 = AABCD和s2 = CDAA,返回true;給定s1 = ABCD和s2 = ACBD,返回false。 思路一:最直接最暴力的解法就是對字串迴圈移位,再進行字串包含的判斷,
程式設計之美之字串移位包含問題
【題目】 給定兩個字串s1和s2,要求判斷s2是否能夠被通過s1做迴圈移位(rotate)得到的字串包含。例如,S1=AABCD和s2=CDAA,返回true;給定s1=ABCD和s2=ACBD,返回false。 【分析】 【思路一】 從題目中可以看出,我們可以使用最直接的
程式設計之美:3.1 字串移位包含的問題
給一個S1=”AABCD”,判斷S2是否能通過S1移位得到,例如S2=“CDAA”,應該返回true。 #include<iostream> #include<string>
《程式設計之美3.1:字串移位包含問題》
給定兩個字串s1和s2,要求判定s2是否能夠通過s1迴圈移位得到的字串包含。例如,給定s1=AABCD和s2=CDAA,返回true;給定s1=ABCD和s2=ACBD,返回false。 /* ========================================
程式設計之美-3.1字串移位包含問題
假設字串s1=AABCD,s2=CDAA,判斷s2是否可以通過S1的迴圈移位得到字串包含。 如 s1移兩位: 1.ABCDA->2.BCDAA 則此時包含了 S2="CDAA" 解題思路: 分解s1的迴圈移位得到: AABCD,ABCDA,BCDAA,
程式設計之美 求陣列的子陣列之和的最大值(包含擴充套件問題解答)
本程式碼可以通過以下測試用例: 陣列:[1,-2,3,5,-3,2] 返回:8 陣列:[0,-2,3,5,-1,2] 返回:9 陣列:[-9,-2,-3,-5,-3] 返回:-2 程式碼清單如下: #include <iostream> using namesp
讀書筆記之程式設計之美 – 3.1 字串移位包含的問題
這個問題雖然只有一顆星,但讓我想卻只能想出解法一的笨解法。看完答案才恍然大悟,原來有這麼一個簡單解法,而且似曾相識。想起以前2.14節的那個陣列首尾相連的問題,是不是也能用這種方法求解啊。 PS: 不知不覺中已經看到了第3章,書看了大概2/3,寫讀書筆記似乎成了看書的動力。
程式設計之美讀書筆記3.1—字串移位包含的問題
給定兩個字串s1和s2,要求判斷s2是否能夠被通過s1做迴圈移位(rotate)得到的字串包含。例如,S1=AABCD和s2=CDAA,返回true;給定s1=ABCD和s2=ACBD,返回false。 1. 最直接的方法對S1進行迴圈移位,遍歷所有可能性。 #i
《程式設計之美》--字串移位包含的問題
對於這道題的前兩種思想書中已經給了比較詳細的解答,下面只是對於前兩種思想的小總結和對第三種思想的闡述。 第一種思想: 真正的移位,比較容易想,實現起來也沒什麼困難。 第二種思想: 移位過程中找到的規律,不論是左移還是右移,如果字串S2包含在S1S1中,那就說明S2可以由S1
程式設計之美——一摞烙餅的排序(暴搜+剪枝)
題目 分析 深度優先搜尋遍歷每一種情況,去翻轉次數最小的,當然,還要加一些剪枝,畢竟O(nn)的時間複雜度。 程式碼 C風格 1 /**** 字首排序 ****/ 2 #include<stdio.h> 3 #include<cstring> 4 #incl
程式設計之美之小飛的電梯排程演算法(多種解法)---Java語言
1.題目情景 我們假設都是從一樓上電梯的,而至於訊電梯停在其中的某一層。即所有的乘客都從一樓上電梯,到達某層之後,電梯停下來,所有乘客再從這裡爬樓梯到自己的目的層。在一樓的時候,每個乘客選擇自己的目的層,電梯則自動計算出應停的樓層,並且能夠保證該層停使得所有
19:字串移位包含問題(1.7程式設計基礎之字串)
19:字串移位包含問題 總時間限制: 1000ms 記憶體限制: 65536kB 描述 對於一個字串來說,定義一次迴圈移位操作為:將字串的第一個字元移動到末尾形成新的字串。 給定兩個字串s1和s2,要求判定其中一個字串是否是另一字串通過若干次迴圈移位後的
一個字串中包含另一個字串所有字元的最短子串長度?——《程式設計之美》最短摘要的生成的簡化
題目: 給定一個字串及一個字串集合A,求該字串中包含A中所有字元的最短子串長度。 解決方案一: 最直接的方法就是,直接開始遍歷:查詢任意兩個子串之間是否包含str2,如果包含,記錄下長度,求得最小值即可。 str1 = "daebfacba"; str2 = "abc";
字串移位包含問題(水~)
字串移位包含問題 描述 對於一個字串來說,定義一次迴圈移位操作為:將字串的第一個字元移動到末尾形成新的字串。 給定兩個字串s1和s2,要求判定其中一個字串是否是另一字串通過若干次迴圈移位後的新字串的子串。例如CDAA是由AABCD兩次移位後產生的新串BCDAA的子串,而
二叉樹系列——二叉樹的最大距離(即相距最遠的兩個葉子節點,程式設計之美,百度面試題)
來自於程式設計之美3.8。 題目:如果我們把二叉樹看做圖,父子節點之間的連線看成是雙向的,我們姑且定義“距離”為兩個節點之間邊的個數。寫一個程式求一棵二叉樹中相距最遠的兩個節點之間的距離。 如下圖所