Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

反復を使用した文字列のすべての順列?


このセクションでは、文字列のすべての順列を取得する方法を説明します。再帰的アプローチは非常に単純です。バックトラッキング手順を使用します。ただし、ここでは反復アプローチを使用します。

文字列ABCのすべての順列は、{ABC、ACB、BAC、BCA、CAB、CBA}のようなものです。より良いアイデアを得るためのアルゴリズムを見てみましょう。

アルゴリズム

getAllPerm(str)

begin
   sort the characters of the string
   while true, do
      print the string str
      i := length of str – 1
      while str[i - 1] >= str[i], do
         i := i – 1
         if i is 0, then
            return
         end if
      done
      j := length of str – 1
      while j > i AND str[j] <= str[i – 1], do
         j := j – 1
      done
      exchange the characters from position str[i - 1], str[j]
      reverse the string.
   done
end

#include <iostream>
#include <algorithm>
using namespace std;
void getAllPerm(string str){
   sort(str.begin(), str.end());
   while (true){
      cout << str << endl;
      int i = str.length() - 1;
      while (str[i-1] >= str[i]){
         if (--i == 0)
         return;
      }
      int j = str.length() - 1;
      while (j > i && str[j] <= str[i - 1])
      j--;
      swap(str[i - 1], str[j]);
      reverse (str.begin() + i, str.end());
   }
}
int main(){
   string str = "WXYZ";
   getAllPerm(str);
}

出力

WXYZ
WXZY
WYXZ
WYZX
WZXY
WZYX
XWYZ
XWZY
XYWZ
XYZW
XZWY
XZYW
YWXZ
YWZX
YXWZ
YXZW
YZWX
YZXW
ZWXY
ZWYX
ZXWY
ZXYW
ZYWX
ZYXW

  1. 再帰を使用して文字列のすべての順列を辞書式順序で出力するPythonプログラム

    再帰を使用して文字列のすべての順列を辞書式順序で出力する必要がある場合は、「for」ループを使用して要素のシーケンスを反復処理し、「join」メソッドを使用して要素を結合するメソッドが定義されます。 以下は同じのデモンストレーションです- 例 from math import factorial def lexicographic_permutation_order(s):    my_sequence = list(s)    for _ in range(factorial(len(my_sequence))):     &n

  2. Pythonでitertoolsを使用して、文字列の最初のn個の異なる順列を出力します

    多数のオブジェクトの順列は、更新がさまざまなシーケンスでどのように存在するかを表しています。ただし、同じオブジェクトのシリーズに2つのオブジェクトがある場合があります。その場合、2つのシーケンスは等しくなります。この記事では、特定のオブジェクトのリストから一意のシーケンスのみを表す方法について説明します。 モジュールitertoolsには、これを実現するのに役立つ順列と呼ばれるメソッドがあります。一意の順列を取得するために、個別の要素のみを格納するsetメソッドを利用します。ただし、その前に、sortedメソッドを使用してソートされた順序で要素を取得します。 以下のプログラムでは、Kは、可