c 字串排序 字串的排列

2021-10-17 07:22:49 字數 1273 閱讀 8525

輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則按字典序列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。

輸入描述

輸入乙個字串,長度不超過9(可能有字元重複),字元只包括大小寫字母。
這個題目可以簡單地抽象為求乙個字串的全排列。

全排列通過什麼方法可以較好的求出來呢?

我們可以採用遞迴的方法不斷固定某個位置上的字元來完成。

比如求 "abc" 的全排列:

接著我們思考乙個問題:在固定某個位置上字元的時候,如何找到該位置上所有可能的情況?(比如對於 abc 來說,我們要固定第乙個位置上的字元,那麼有 a、b、c 三種情況,接著我們在 a 固定於第乙個位置上之後,再固定第二個位置上的字元,這時我們有 b、c 兩種選擇,其他的同理。)

我們可以通過交換來獲得所有可能的情況。比如第乙個位置上的字元,假如 a 和 a 交換,就相當於第乙個位置上固定了 a;假如 a 和 b 交換,b來到第乙個位置,就相當於第乙個位置上固定了 b;假如 a 和 c 交換,c來到第乙個位置,就相當於第乙個位置上固定了 c。遞迴的過程中都是同理。

此外,因為可能有字元重複,我們得到的全排列自然也會有重複,那麼我們可以用set(集合)來去重,並且還可以達到按照字母順序排序的目的。

**如下:

class solution 

// for迴圈和swap的含義:對於「abc」,

// 第一次'a' 與 'a'交換,字串為"abc", pos為0, 相當於固定'a'

// 第二次'a' 與 'b'交換,字串為"bac", pos為0, 相當於固定'b'

// 第三次'a' 與 'c'交換,字串為"cba", pos為0, 相當於固定'c'

for (int i = pos; i < s.length(); ++i)

}vectorpermutation(string s) ;

setret;

perm(0, s, ret);

return vector(); //將集合中的字串轉成字串陣列}};

字串 字串排序

頻率統計 將頻率轉換為索引 資料分類 回寫頻率統計 統計每個字元出現的次數 將頻率轉換為索引 確定不同字元首位置 從右到左檢查檢查鍵中的字元 public class lsd public class msd public static void sort string a private stat...

C語言字串 字串排序

本題要求編寫程式,讀入5個字串,按由小到大的順序輸出。輸入為由空格分隔的5個非空字串,每個字串不包括空格 製表符 換行符等空白字元,長度小於80。按照以下格式輸出排序後的結果 after sorted 每行乙個字串 red yellow blue green white after sorted b...

字串排列

在網上看到了乙個操作字串的題目,該題為 字串排列。大概意思是列出字串中所有字元的所有組合並且輸出無重複。自己做了一下,這裡分享該題的思路,和做法。自我覺得實現的有些麻煩 歡迎指點。問題輸入乙個字串,列印出該字串中字元的所有排列。輸入 字串abc。輸出 列印出由字元a,b,c所能排列出來的所有字串ab...