問題描述:
長度為n的字串,在第 i 的位置處向左旋轉或者向右旋轉。比如字串abcdefgh 長度n為8 ,若將該字串在i=3的位置處,向左旋轉則得到字串defghabc 。問題要求:時間複雜度要和n成正比,記憶體幾十位元組。
問題解決方法:
數學基礎 即將矩陣 ab 變為ba 。
ab---> a'b--->a'b'------>(a'b')'--------->ba 。 其中 ' 表示矩陣的轉置。
解決方法:
將abc 看做a ,defgh 看做 b
具體演算法:
(1) abcdefgh-----> cbadefgh reverse(0 , i - 1)
(2) cbadefgh------> cbahgfed reverse( i , n - 1)
(3) cbahgfed ------> defghabc reverse(0 , n - 1)
總結:通過上述(1),(2),(3) 即完成了字串轉置 。每乙個reverse() 函式的時間複雜度均為o(n) ,空間複雜度只利用了乙個臨時變數,滿足上述要求。
#include
<
iostream
>
<
cstring
>
using
namespace
std ;
const
intsize =40
;void
reverse(
char
*a ,
intbegin ,
intend)
intmain()
字串逆轉問題2
給定乙個字串,你需要反轉字串中每個單詞的字元順序,同時仍保留空格和單詞的初始順序。示例 1 輸入 let s take leetcode contest 輸出 s tel ekat edocteel tsetnoc 注意 在字串中,每個單詞由單個空格分隔,並且字串中不會有任何額外的空格。如下 pub...
字串逆轉問題1
給定乙個字串和乙個整數 k,你需要對從字串開頭算起的每 2k 個字元的前k個字元進行反轉。如果剩餘少於 k 個字元,則將剩餘的所有全部反轉。如果有小於 2k 但大於或等於 k 個字元,則反轉前 k 個字元,並將剩餘的字元保持原樣。示例 輸入 s abcdefg k 2 輸出 bacdfeg 1 不成...
字串逆轉
題意 輸入乙個字串,逆向輸出該串。sample input 3frankly,i don t think we ll make much money out of this scheme.madam i m adam sample output hcum ekam ll ew kniht t nod...