文字列が与えられます。これが str であると仮定すると、長さは任意の値にすることができます。タスクは、結果の文字列内で隣接する同一の文字が並ばないように、指定された文字列を再配置することです。
入力 - String str = "itinn"
出力 -隣接する 2 つの文字が異なるように文字列内の文字を並べ替えます。結果は次のようになります: initn。
説明 - 文字列型の変数が str であると仮定して与えられます。ここで、同じ位置に 2 つの同一の文字が表示されないように、入力文字列の文字を再配置します。つまり、「nn」を隣接しない位置に移動します。最終的な結果は次のとおりです 文字列は 'initn' になります。
Input - String str = "abbaabbaa"
Output - string 内の文字を並べ替えて、次のようにします。隣接する文字が異なります: ababababa
説明 - str であると仮定して、文字列型の変数が与えられます。次に、2 つの同じ文字が同じ位置に表示されないように、入力文字列の文字を再配置します。つまり、これらは同じで隣接しているため、'bb'、'aa'、'bb'、'aa' を移動します。したがって、最後の文字列は「ababababa」になります。
文字列型の変数を str として入力し、文字列のサイズを計算して格納します。名前は長さの変数です。
長さが 0 であるかどうかを確認してから戻ります。
データを関数 Rearrangement(str, length) に渡します。
関数内 Rearrangement(arr, length)
文字列のサイズを (長さ 1)/2 に設定します。
整数型データを格納するベクトル型変数 vec(26, 0) と文字列型ポインタ ptr(length, ‘ ‘) を宣言します。また、整数型、値 0 の一時変数 temp を宣言します。
FOR のループを開始して str を反復します。ループ内で、 vec[it - ‘a’] を設定します。
文字型変数 ch を作成し、maximum(vec) 関数の呼び出し結果を設定します。
整数型変数 total を宣言し、vec[ch - ‘a’] に設定します。
合計がサイズより大きいかどうかを確認し、戻ります。
total WHILE でループを開始し、ptr[temp] を ch に設定し、temp を temp 2 に設定し、total を 1 減らします。
vec[ch - 'a'] を 0 に設定します。 i が 26 未満になるまで、i から 0 まで FOR のループを開始します。ループ内で while ループを開始し、vec[i] が 0 より大きい場合、temp を (temp >= length) ? 1: temp に設定し、ptr[temp] を 'a' i に設定し、temp を temp 2 に設定します。 、vec[i]を1減算します。
#include <bits/stdc++.h> using namespace std; char maximum(const vector<int>& vec){ int high = 0; char c; for(int i = 0; i < 26; i++){ if(vec[i] > high){ high = vec[i]; c = 'a' + i; } } return c; } string Rearrangement(string str, int length){ int size = (length + 1) / 2; vector<int> vec(26, 0); string ptr(length, ' '); int temp = 0; for(auto it : str){ vec[it - 'a']++; } char ch = maximum(vec); int total = vec[ch - 'a']; if(total > size){ return ""; } while(total){ ptr[temp] = ch; temp = temp + 2; total--; } vec[ch - 'a'] = 0; for(int i = 0; i < 26; i++){ while (vec[i] > 0){ temp = (temp >= length) ? 1 : temp; ptr[temp] = 'a' + i; temp = temp + 2; vec[i]--; } } return ptr; } int main(){ string str = "itinn"; int length = str.length(); if(length == 0){ cout<<"Please enter a valid string"; } string count = Rearrangement(str, length); if(count == ""){ cout<<"Please enter a valid string"; } else{ cout<<"Rearrangement of characters in a string such that no two adjacent are same is: "<<count; } return 0; }
Rearrangement of characters in a string such that no two adjacent are same is: initn
以上が隣接する 2 つの文字が異なるように文字列内の文字を再配置します。C++ で実装されています。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。