转载请注明作者和出处:https://blog.csdn.net/qq_28810395
运行平台: Windows 10
LeetCode官网:Fhttps://leetcode-cn.com/

一、串联字符串的最大长度

  给定一个字符串数组 arr,字符串 s 是将 arr 某一子序列字符串连接所得的字符串,如果 s 中的每一个字符都只出现过一次,那么它就是一个可行解。请返回所有可行解 s 中最长长度。

1.示例 1:

输入:arr = ["un","iq","ue"]
输出:4
解释:所有可能的串联组合是 "","un","iq","ue","uniq" 和 "ique",最大长度为 4。

2.示例 2:

输入:arr = ["cha","r","act","ers"]
输出:6
解释:可能的解答有 "chaers" 和 "acters"。

3.示例 3:

输入:arr = ["abcdefghijklmnopqrstuvwxyz"]
输出:26

4.提示:

  • 1 <= arr.length <= 16
  • 1 <= arr[i].length <= 26
  • arr[i] 中只含有小写英文字母

二、解答思路

  1. 选出arr中没有重复字符的字符串作为有效arr;
  2. 假设理想情况,将arr中所有有效且不重复的字符拼接在一起,其长度作为最大长度,达到此长度立即停止;
  3. 排除无效的情况,即arr中所剩所有字符串不重复的字符拼接在一起与现有ans的长度和超过不了之前的最大值,则停止;
  4. 回溯递归,递归结束的长度最大值即为所求。

三、解答

class Solution:def maxLength(self, arr: List[str]) -> int:valid_arr = [s for s in arr if len(set(s)) == len(s)]max_len = len(set().union(*valid_arr))self.max_n = 0def maxLength(ans, arr):if len(ans) == max_len\or len(ans) + len(set().union(*arr)) <= self.max_n:returnfor i in range(len(arr)):if not set(ans) & set(arr[i]):ans += arr[i]if len(ans) > self.max_n:self.max_n = len(ans)maxLength(ans, arr[i + 1:])ans = ans.replace(arr[i], '')maxLength('', valid_arr)return self.max_n

四、参考信息

[1]https://leetcode-cn.com/problems/maximum-length-of-a-concatenated-string-with-unique-characters/solution/zhi-xing-yong-shi-36-ms-zai-suo-you-pyth-2lx4/

LeetCode每日一题——串联字符串的最大长度相关推荐

  1. LeetCode每日一题: 最后一个单词的长度(No.58)

    题目:最后一个单词的长度 给定一个仅包含大小写字母和空格 ' ' 的字符串,返回其最后一个单词的长度. 如果不存在最后一个单词,请返回 0 . 说明:一个单词是指由字母组成,但不包含任何空格的字符串. ...

  2. LeetCode每日一题——1758. 生成交替二进制字符串的最少操作数

    LeetCode每日一题系列 题目:1758. 生成交替二进制字符串的最少操作数 难度:简单 文章目录 LeetCode每日一题系列 题目 示例 思路 题解 题目 给你一个仅由字符 '0' 和 '1' ...

  3. leetcode每日一题--前缀树;前缀哈希;深搜;面试题 08.04. 幂集;648. 单词替换面试题 01.09. 字符串轮转;剑指 Offer II 062. 实现前缀树

    leetcode每日一题 ps:今天的每日一题没意思,简单的模拟,自己换一道 面试题 08.04. 幂集 幂集.编写一种方法,返回某集合的所有子集.集合中不包含重复的元素. 说明:解集不能包含重复的子 ...

  4. LeetCode每日一题——1684. 统计一致字符串的数目

    LeetCode每日一题系列 题目:1684. 统计一致字符串的数目 难度:简单 文章目录 LeetCode每日一题系列 题目 示例 思路 题解 题目 给你一个由不同字符组成的字符串 allowed ...

  5. LeetCode每日一题——1812. 判断国际象棋棋盘中一个格子的颜色

    LeetCode每日一题系列 题目:1812. 判断国际象棋棋盘中一个格子的颜色 难度:简单 文章目录 LeetCode每日一题系列 题目 示例 思路 题解 题目 给你一个坐标 coordinates ...

  6. LeetCode 每日一题 3. 无重复字符的最长子串

    LeetCode 每日一题 3. 无重复字符的最长子串   大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博客地址为:亓官劼的博客 本文原创 ...

  7. Leetcode 每日一题双题版(2.25+2.24)模拟练细节

    Leetcode 每日一题双题版(2.25+2.24)模拟练细节 前言 刚刚敲了今天刷新的题目,然后昨天的也写了,就想着更新一下blog 两道题都是模拟题,对于模拟,我的看法就是看懂题目,拿捏细节,难 ...

  8. LeetCode每日一题——811. 子域名访问计数

    LeetCode每日一题系列 题目:811. 子域名访问计数 难度:普通 文章目录 LeetCode每日一题系列 题目 示例 思路 题解 题目 网站域名 "discuss.leetcode. ...

  9. LeetCode每日一题——792. 匹配子序列的单词数

    LeetCode每日一题系列 题目:792. 匹配子序列的单词数 难度:普通 文章目录 LeetCode每日一题系列 题目 示例 思路 题解 题目 给定字符串 s 和字符串数组 words, 返回 w ...

  10. LeetCode每日一题(题1028)

    题1028 前言 题目 思路 代码 错误 后记 前言 最近在刷LeetCode每日一题,每次做完之后总能有些收获,所以想着不如每天写个博客记录一下做的题目的解法以及自己写的时候问题出在哪里. 题目 从 ...

最新文章

  1. 【java 性能优化实战】2 深入剖析:哪些资源,容易成为瓶颈
  2. 设计模式之享元模式学习笔记
  3. CentOS系统基础优化16条知识汇总
  4. MyBatisPlus中通用CRUD的updateById方法
  5. soapui 测试soap_使用SoapUI调用不同的安全WCF SOAP服务-基本身份验证,第一部分
  6. Linux vi 编辑器常见命令的使用
  7. 大公司or小公司,我该怎么选?
  8. LeetCode 695 岛屿的最大面积
  9. 【kafka】kafka DefaultRecordBatch. The older message format classes only support conversion from class
  10. 【JSOI2008】【bzoj1012】最大数maxnumber
  11. Windows界面编程_Miniblink(6) 个人信息界面
  12. 【转】关于23种设计模式的有趣见解
  13. Elasticsearch 地理位置查询
  14. 计算机多媒体技术的应用,计算机多媒体技术及其应用.ppt
  15. 女双中后场常用技术及训练方法[技术解码]
  16. 研发协同平台架构演进
  17. 联想小新一键恢复小孔_联想小新笔记本如何一键恢复出厂设置_联想小新air恢复出厂设置教程...
  18. 修改微软输入法的时间日期格式
  19. 交管12123服务器维护,交管12123服务异常怎么办?交管12123 APP服务异常解决方法...
  20. 迅为I.MX6ULL开发板镜像烧写

热门文章

  1. Const限定符与C++11Constexpr的区别
  2. Appimage版wine乱码解决
  3. Nginx与tomcat集成
  4. 提供 web前端、H5、html页面 技术服务
  5. vue入门学习篇——父子组件通信
  6. 并发编程 进程基础
  7. Netty2:粘包/拆包问题与使用LineBasedFrameDecoder的解决方案
  8. 【DTOJ】2701:问候
  9. IntelliJ IDEA 12 与 Tomcat7 配置
  10. android textView 折叠 展开 ExpandableTextView