-
Notifications
You must be signed in to change notification settings - Fork 215
/
Copy pathmax_len_of_concatenated_string_with_unique_char.cpp
67 lines (54 loc) · 1.63 KB
/
max_len_of_concatenated_string_with_unique_char.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
/*
You are given an array of strings arr. A string s is formed by the concatenation of a subsequence of arr that has unique characters.
Return the maximum possible length of s.
A subsequence is an array that can be derived from another array by deleting some or no elements without changing the order of the remaining elements.
Example 1:
Input: arr = ["un","iq","ue"]
Output: 4
Explanation: All the valid concatenations are:
- ""
- "un"
- "iq"
- "ue"
- "uniq" ("un" + "iq")
- "ique" ("iq" + "ue")
Maximum length is 4.
Example 2:
Input: arr = ["cha","r","act","ers"]
Output: 6
Explanation: Possible longest valid concatenations are "chaers" ("cha" + "ers") and "acters" ("act" + "ers").
Example 3:
Input: arr = ["abcdefghijklmnopqrstuvwxyz"]
Output: 26
Explanation: The only string in arr has all 26 characters.
Constraints:
1 <= arr.length <= 16
1 <= arr[i].length <= 26
arr[i] contains only lowercase English letters.
*/
class Solution {
public:
int check(vector<string>& arr, int i, string s){
if(i == arr.size()){
int freq[26] = {0};
for(int k = 0; k < s.length(); k++){
if(freq[s[k]-'a'] == 1)
return 0;
freq[s[k]-'a']++;
}
return s.length();
}
int op1, op2;
op1 = op2 = INT_MIN;
// include the string
if(s.length() + arr[i].length() <= 26){
op1 = check(arr, i+1, s + arr[i]);
}
// exclude it
op2 = check(arr, i+1, s);
return max(op1, op2);
}
int maxLength(vector<string>& arr) {
return check(arr, 0, "");
}
};