導航:首頁 > 源碼編譯 > 重復字元串演算法

重復字元串演算法

發布時間:2023-03-08 12:01:48

A. 含有重復字元的字元串排列組合

排列:從給定個數的元素中取出指定個數的元素進行排序
組合:從給定個數的元素中取出指定個數的元素,不考慮排序

排列包含了組合的過程,從給定個數的元素中取出指定個數元素(組合),然後再把取出的元素進行排序。

這意味著,我們利用組合得到組合數,然後利用組合數實現全排列,就得到了排列。

一般組合指的是取出1~n個元素的組合,因為全組合只有一個

輸入一個長度為n的字元串,輸出該字元串中字元的所有組合

如果輸入"abc",它的組合有a、b、c、ab、ac、bc、abc

①假設在長度為n的字元串中求m個字元的組合
②從頭掃描字元串的第一個字元,有兩種選擇:
(1)把這個字元放到組合中去,接下來我們需要在剩下的n-1個字元中選取m-1個字元
(2)不把這個字元放到組合中去,接下來我們需要在剩下的n-1個字元中選擇m個字元

注意:所有字元取出擺放的位置都是以原來的相對位置,不改變原來的前後順序

基本思路 :求組合,表示可以取少於總字元個數的字元組合,因為全字元組合就一個,則假設輸入字元個數為n個,則最終組合結果是(2^n - 1)個。
原因 :假設字元為a,b,c,則1表示取c元素,0表示不取c。所以001表示取c,010取b,100取a,011取bc.所以一共三位,每個位上有兩個選擇0,1.所以是(2^n - 1)個結果。依次表示為: 001,010,011,100,101,110,111 。對應輸出組合結果為: a, b ,ab,c,ac,bc,abc .

注意:這個思路也非常好~ 但是前提是 字元長度不超過32個

利用hashSet實現查重:第一次放入到hashSet輸出結果,如果遇到已經在hashSet中存在,則不輸出結果

注意 :由於利用HashSet實現去重,而不是直接在演算法上實現去重,增加了空間復雜度和時間復雜度,所以不是最優演算法。關於演算法優化,有待後面繼續提高和實現!
如果網友有更好的方法,還是多多指教!

輸入一個長度為n的字元串,輸出該字元串中字元的全排列

如果輸入「abc」,則全排列為abc、acb、bac、bca、cab和cba。

①遞歸實現,每遞歸一次取一個字元作為當前輸入字元的首字元。例如,輸入「abc」,則取第一個字元「a」,把字元「a」與第一個字元「a」交換,當前不用交換。剩下的字元「bc」,下次遞歸也是這樣。如果選取的是字元「b」,則在字元數組中把字元「b」與字元「a」交換,後面選取字元就是在「ac」中選取。如果選取的是字元「c」,與字元「a」交換,下次選取就是在「ba」中選取
②每次選取後,下次遞歸則需要把交換的字元順序,重新返回。

輸入一個長度為n的字元串,字元中包含重復字元,輸出字元的全排列

如果輸入「abb」,則全排列為abb, bab, bba

參考文獻
[1] 字元串的全排列和組合
[2] 字元串排列和組合的java實現
[3] 字元串的全排列和組合演算法
[4] 帶有重復字元的字元數組的全排列
[5] java 全組合 與全排列
[6] 字元串組合——位運算
[7] java排列組合問題匯總【經典】

閱讀全文

與重復字元串演算法相關的資料

熱點內容
噴油螺桿製冷壓縮機 瀏覽:579
python員工信息登記表 瀏覽:377
高中美術pdf 瀏覽:161
java實現排列 瀏覽:513
javavector的用法 瀏覽:982
osi實現加密的三層 瀏覽:233
大眾寶來原廠中控如何安裝app 瀏覽:916
linux內核根文件系統 瀏覽:243
3d的命令面板不見了 瀏覽:526
武漢理工大學伺服器ip地址 瀏覽:149
亞馬遜雲伺服器登錄 瀏覽:525
安卓手機如何進行文件處理 瀏覽:71
mysql執行系統命令 瀏覽:930
php支持curlhttps 瀏覽:143
新預演算法責任 瀏覽:444
伺服器如何處理5萬人同時在線 瀏覽:251
哈夫曼編碼數據壓縮 瀏覽:426
鎖定伺服器是什麼意思 瀏覽:385
場景檢測演算法 瀏覽:617
解壓手機軟體觸屏 瀏覽:350