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

重復字元串演算法

發布時間: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排列組合問題匯總【經典】

閱讀全文

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

熱點內容
怎麼顯示android的APP 瀏覽:121
c編譯器怎麼刪除空格 瀏覽:695
php自動釋放內存 瀏覽:219
golang編譯庫 瀏覽:794
oracle數據字元串加密 瀏覽:603
研究生去上海當程序員 瀏覽:90
u8電腦伺服器連接失敗怎麼解決 瀏覽:569
bat腳本創建日期命名文件夾 瀏覽:104
將圖片轉換為pdf格式 瀏覽:980
java中形參 瀏覽:83
枚舉類型編譯器 瀏覽:519
oraclejava包 瀏覽:568
手機定位手機怎麼定位安卓 瀏覽:523
在哪個app買歐萊雅最便宜 瀏覽:495
程序員吃零食好嗎 瀏覽:261
php工程師主要做什麼 瀏覽:356
tvp保存到哪個文件夾 瀏覽:197
怎麼把空調裡面的壓縮機拆卸掉 瀏覽:943
linux4k對齊 瀏覽:968
單片機與開關電源 瀏覽:276