LeetCode每日一题之串联字符串的最大长度.
难度:中等
0.0.1. 题目
给定一个字符串数组arr
,字符串s
是将arr
某一子序列字符串连接所得的字符串,如果s
中的每一个字符都只出现过一次,那么它就是一个可行解。
请返回所有可行解s
中最长长度。
示例 1:1
2
3输入:arr = ["un","iq","ue"]
输出:4
解释:所有可能的串联组合是 "","un","iq","ue","uniq" 和 "ique",最大长度为 4。
示例 2:1
2
3输入:arr = ["cha","r","act","ers"]
输出:6
解释:可能的解答有 "chaers" 和 "acters"。
示例 3:1
2输入:arr = ["abcdefghijklmnopqrstuvwxyz"]
输出:26
提示:
1 <= arr.length <= 16
1 <= arr[i].length <= 26
arr[i] 中只含有小写英文字母
0.0.2. 我的解法(79/85)
很遗憾。。。
1 | class Solution(object): |
0.0.3. 好的解法
参考:benhao
0.0.3.1. 直白质朴法
我的思路总体和这个是一致的1
2
3
4
5
6
7
8
9
10
11
12
13
14class Solution:
def maxLength(self, arr: List[str]) -> int:
def validStr(string):
return len(set(string)) == len(string)
dp = []
for s in arr:
if not validStr(s):
continue
for s_ in dp:
if validStr(s_ + s):
dp.append(s_ + s)
dp.append(s)
return len(max(dp,key=len)) if dp else 0
0.0.4.
0.0.5. 回溯法
回溯算法,采用递归实现
1 | class Solution(): |