Giả sử chúng ta có một mảng chuỗi arr. Chuỗi s là một chuỗi nối con của chuỗi arr có các ký tự duy nhất. Tìm độ dài lớn nhất có thể có của s. Nếu đầu vào là [“cha”, “r”, “act”, “ers”], thì đầu ra sẽ là 6, các giải pháp khả thi là “chaers” và “acters”.
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- tạo một phương thức được gọi là ok () và điều này sẽ nhận các chuỗi s và t. Điều này sẽ hoạt động như dưới đây
- tạo một bản đồ x
- cho tôi trong phạm vi từ 0 đến kích thước của s
- tăng x [s [i]] lên 1
- nếu x [s [i]]> 1, thì trả về false
- cho tôi trong phạm vi từ 0 đến kích thước của t
- tăng x [t [i]] lên 1
- nếu x [t [i]]> 1, thì trả về false
- trả về true
- phương pháp thực tế sẽ giống như bên dưới -
- tạo một mảng các chuỗi được gọi là v và ans:=0, chèn một chuỗi trống vào v
- cho tôi trong phạm vi từ 0 đến kích thước của arr
- n:=kích thước của v
- cho j trong phạm vi từ 0 đến n - 1
- nếu ok (v [j], arr [i]) là đúng, thì
- t:=v [j] + arr [i]
- chèn t vào v
- ans:=max của ans và kích thước của t
- nếu ok (v [j], arr [i]) là đúng, thì
- trả lại ans
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
Ví dụ
#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));
} Đầu vào
["cha","r","act","ers"]
Đầu ra
6