1239:串联字符串的最大长度

This commit is contained in:
轩辕龙儿 2023-04-08 22:20:05 +08:00
parent 7d80d9b2bd
commit 450095cddd
2 changed files with 143 additions and 0 deletions

View File

@ -0,0 +1,94 @@
////给定一个字符串数组 arr字符串 s 是将 arr 的含有 不同字母 子序列 字符串 连接 所得的字符串
//
// 请返回所有可行解 s 中最长长度
//
// 子序列 是一种可以从另一个数组派生而来的数组通过删除某些元素或不删除元素而不改变其余元素的顺序
//
//
//
// 示例 1
//
//
//输入arr = ["un","iq","ue"]
//输出4
//解释所有可能的串联组合是
//- ""
//- "un"
//- "iq"
//- "ue"
//- "uniq" ("un" + "iq")
//- "ique" ("iq" + "ue")
//最大长度为 4
//
//
// 示例 2
//
//
//输入arr = ["cha","r","act","ers"]
//输出6
//解释可能的解答有 "chaers" "acters"
//
//
// 示例 3
//
//
//输入arr = ["abcdefghijklmnopqrstuvwxyz"]
//输出26
//
//
//
//
// 提示
//
//
// 1 <= arr.length <= 16
// 1 <= arr[i].length <= 26
// arr[i] 中只含有小写英文字母
//
//
// Related Topics 位运算 数组 字符串 回溯 👍 217 👎 0
package leetcode.editor.cn;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
// 1239:串联字符串的最大长度
public class MaximumLengthOfAConcatenatedStringWithUniqueCharacters {
public static void main(String[] args) {
Solution solution = new MaximumLengthOfAConcatenatedStringWithUniqueCharacters().new Solution();
}
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
StringBuilder sb = new StringBuilder();
int res = 0;
public int maxLength(List<String> arr) {
dfs(arr, 0);
return res;
}
public void dfs(List<String> arr, int start) {
char[] ch = sb.toString().toCharArray();
Set<Character> set = new HashSet<>();
for (char c : ch) {
if (set.contains(c)) {
return;
} else {
set.add(c);
}
}
res = Math.max(res, sb.length());
for (int i = start; i < arr.size(); i++) {
sb.append(arr.get(i));
dfs(arr, i + 1);
sb.delete(sb.length() - arr.get(i).length(), sb.length());
}
}
}
//leetcode submit region end(Prohibit modification and deletion)
}

View File

@ -0,0 +1,49 @@
<p>给定一个字符串数组 <code>arr</code>,字符串 <code>s</code> 是将 <code>arr</code>&nbsp;的含有 <strong>不同字母</strong>&nbsp;<strong>子序列</strong> 字符串 <strong>连接</strong> 所得的字符串。</p>
<p>请返回所有可行解 <code>s</code> 中最长长度。</p>
<p><strong>子序列</strong> 是一种可以从另一个数组派生而来的数组,通过删除某些元素或不删除元素而不改变其余元素的顺序。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>arr = ["un","iq","ue"]
<strong>输出:</strong>4
<strong>解释:</strong>所有可能的串联组合是:
- ""
- "un"
- "iq"
- "ue"
- "uniq" ("un" + "iq")
- "ique" ("iq" + "ue")
最大长度为 4。
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>arr = ["cha","r","act","ers"]
<strong>输出:</strong>6
<strong>解释:</strong>可能的解答有 "chaers" 和 "acters"。
</pre>
<p><strong>示例 3</strong></p>
<pre>
<strong>输入:</strong>arr = ["abcdefghijklmnopqrstuvwxyz"]
<strong>输出:</strong>26
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= arr.length &lt;= 16</code></li>
<li><code>1 &lt;= arr[i].length &lt;= 26</code></li>
<li><code>arr[i]</code>&nbsp;中只含有小写英文字母</li>
</ul>
<div><div>Related Topics</div><div><li>位运算</li><li>数组</li><li>字符串</li><li>回溯</li></div></div><br><div><li>👍 217</li><li>👎 0</li></div>