aboutsummaryrefslogtreecommitdiff
path: root/other/max_len_concat_str.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'other/max_len_concat_str.cpp')
-rw-r--r--other/max_len_concat_str.cpp30
1 files changed, 30 insertions, 0 deletions
diff --git a/other/max_len_concat_str.cpp b/other/max_len_concat_str.cpp
new file mode 100644
index 0000000..b364d26
--- /dev/null
+++ b/other/max_len_concat_str.cpp
@@ -0,0 +1,30 @@
+#include "leetcode.h"
+
+class Solution {
+public:
+ int maxLength(vector<string> &arr) {
+ int ans = 0;
+ vector<bitset<26>> unique;
+ for (auto s : arr) {
+ bitset<26> b;
+ for (char ch : s)
+ b.set(ch - 'a');
+ if (b.count() == s.size())
+ unique.push_back(b);
+ }
+ vector<bitset<26>> concat = {bitset<26>()};
+ for (auto &u : unique)
+ for (int i = concat.size() - 1; i >= 0; i--)
+ if ((concat[i] & u).none()) {
+ concat.push_back(concat[i] | u);
+ ans = max(ans, (concat[i].count() + u.count()));
+ }
+ return ans;
+ }
+};
+
+int main() {
+ Solution obj;
+ vector<string> arr = {"un", "iq", "ue"};
+ cout << obj.maxLength(arr);
+}