C++での一意の文字を含む連結文字列の最大長
文字列arrの配列があるとします。文字列sは、一意の文字を持つarrのサブシーケンスを連結したものです。 sの可能な最大長を見つけます。入力が["cha"、 "r"、 "act"、 "ers"]の場合、出力は6になります。考えられる解決策は、「chaers」と「acters」です。
これを解決するには、次の手順に従います-
- ok()という1つのメソッドを作成します。これには、文字列sとtが必要です。これは以下のように動作します
- 1つのマップを作成するx
- 0からsのサイズまでの範囲のiの場合
- x[s[i]]を1増やします
- x [s [i]]> 1の場合、falseを返します
- 0からtのサイズまでの範囲のiの場合
- x[t[i]]を1増やします
- x [t [i]]> 1の場合、falseを返します
- trueを返す
- 実際の方法は次のようになります-
- vと呼ばれる文字列の配列を作成し、ans:=0、1つの空の文字列をvに挿入します
- 0からarrのサイズまでの範囲のiの場合
- n:=vのサイズ
- 0からn–1の範囲のjの場合
- ok(v [j]、arr [i])が真の場合、
- t:=v [j] + arr [i]
- tをvに挿入
- ans:=ansの最大値とtのサイズ
- ok(v [j]、arr [i])が真の場合、
- 回答を返す
理解を深めるために、次の実装を見てみましょう-
例
#include <bits/stdc++.h> using namespace std; class Solution { public: bool ok(string s, string t){ map <char, int > x; for(int i = 0; i < s.size(); i++){ x[s[i]]++; if(x[s[i]] >1)return false; } for(int i = 0; i < t.size(); i++){ x[t[i]]++; if(x[t[i]]>1)return false; } return true; } int maxLength(vector<string>& arr) { vector <string> v; int ans = 0; v.push_back(""); for(int i = 0; i < arr.size(); i++){ int n = v.size(); for(int j = 0; j < n; j++){ if(ok(v[j],arr[i])){ string t = v[j]+arr[i]; v.push_back(t); ans = max(ans,(int)t.size()); } } } return ans; } }; main(){ vector<string> v = {"cha","r","act","ers"}; Solution ob; cout << (ob.maxLength(v)); }
入力
["cha","r","act","ers"]
出力
6
-
Pythonプログラムで一般的でない文字と連結された文字列
2つの文字列を指定し、両方の文字列から一意の文字を含む新しい文字列を取得することを目標としています。たとえば、2つの文字列がある場合 hafeez およびカリーム 次に、2つの文字列から生成される新しい文字列は hfzkrmです。 。 2つの文字列から異なる文字を取得することを目指しています。私の手順に従う前に、ロジックについて一度考えてください。 プログラムのロジックについて考えることができない場合は、以下の手順に従ってください。 アルゴリズム 1. Initialize the string. 2. Initialize an empty string. 3. Loop over th
-
Pythonで一般的でない文字と連結された文字列?
ここでは2つの文字列が与えられています。最初に、最初の文字列からすべての共通要素を削除し、2番目の文字列の一般的でない文字を最初の文字列の一般的でない要素と連結する必要があります。 例 Input >> first string::AABCD Second string:: MNAABP Output >> CDMNP アルゴリズム Uncommonstring(s1,s2) /* s1 and s2 are two string */ Step 1: Convert both string into set st1 and st2. Step 2: use th