Leetcode 1239. 串联字符串的最大长度
给定一个字符串数组 arr,字符串 s 是将 arr 某一子序列字符串连接所得的字符串,如果 s 中的每一个字符都只出现过一次,那么它就是一个可行解。
请返回所有可行解 s 中最长长度。
示例 : 输入:arr = ["un","iq","ue"]
输出:
解释:所有可能的串联组合是 "","un","iq","ue","uniq" 和 "ique",最大长度为 。
示例 : 输入:arr = ["cha","r","act","ers"]
输出:
解释:可能的解答有 "chaers" 和 "acters"。
示例 : 输入:arr = ["abcdefghijklmnopqrstuvwxyz"]
输出:
提示:
1 <= arr.length <= 16
1 <= arr[i].length <= 26
arr[i] 中只含有小写英文字母
题解:
1 首先考虑DFS 遍历各种组合
2 考虑使用bit代表各个字符出现与否
这里为了代码写的方便 使用了一个26长度的数组 记录字符是否出现与否
代码
class Solution {
public:
vector<int> currenthash;
int currentLen;
vector<vector<int>> hashVec;
int ret = -;
bool CheckHash(vector<int>& hash1, vector<int>& hash2) {
for (int i = ; i < hash1.size(); i++) {
if (hash1[i] + hash2[i] > )
return false;
}
return true;
}
void startTry(int idx,int currentLen, vector<string>& arr)
{
if (idx == arr.size()) {
ret = max(ret, currentLen);
return;
}
if (CheckHash(currenthash, hashVec[idx])) {
currentLen += arr[idx].size();
for (int i = ; i < currenthash.size(); i++) {
currenthash[i] += hashVec[idx][i];
}
startTry(idx + , currentLen,arr);
for (int i = ; i < currenthash.size(); i++) {
currenthash[i] -= hashVec[idx][i];
}
currentLen -= arr[idx].size();
}
startTry(idx + , currentLen, arr);
}
int maxLength(vector<string>& arr) {
currenthash = vector<int>(, );
currentLen = ;
hashVec = vector<vector<int>>(arr.size(), vector<int>(, ));
for (int i = ; i < arr.size(); i++) {
for (int j = ; j < arr[i].size(); j++) {
int idx = arr[i][j] - 'a';
hashVec[i][idx]++;
//优化
}
}
currenthash = vector<int>(, );
currentLen = ;
startTry(, ,arr);
return ret;
}
};
Leetcode 1239. 串联字符串的最大长度的更多相关文章
- LeetCode1239串联字符串的最大长度
题目 给定一个字符串数组 arr,字符串 s 是将 arr 某一子序列字符串连接所得的字符串,如果 s 中的每一个字符都只出现过一次,那么它就是一个可行解. 请返回所有可行解 s 中最长长度. 解题 ...
- 前端与算法 leetcode 344. 反转字符串
目录 # 前端与算法 leetcode 344. 反转字符串 题目描述 概要 提示 解析 解法一:双指针 解法二:递归 算法 传入测试用例的运行结果 执行结果 GitHub仓库 # 前端与算法 lee ...
- leetcode 1593. 拆分字符串使唯一子字符串的数目最大(DFS,剪枝)
题目链接 leetcode 1593. 拆分字符串使唯一子字符串的数目最大 题意: 给你一个字符串 s ,请你拆分该字符串,并返回拆分后唯一子字符串的最大数目. 字符串 s 拆分后可以得到若干 非空子 ...
- linux shell 字符串操作(长度,查找,替换)详解
linux shell 字符串操作(长度,查找,替换)详解 在做shell批处理程序时候,经常会涉及到字符串相关操作.有很多命令语句,如:awk,sed都可以做字符串各种操作. 其实shell内置一系 ...
- 46. 对称子字符串的最大长度(ToDo)
[题目] 输入一个字符串,输出该字符串中对称的子字符串的最大长度.比如输入字符串“google”,由于该字符串里最长的对称子字符串是“goog”,因此输出4. [分析] 可能很多人都写过判断一个字符串 ...
- squee_spoon and his Cube VI(贪心,找不含一组字符串的最大长度+kmp)
1818: squee_spoon and his Cube VI Time Limit: 1 Sec Memory Limit: 128 MB Submit: 77 Solved: 22Subm ...
- shell脚本—— 字符串操作(长度,查找,替换)
表达式 含义 ${var} 变量var的值, 与$var相同 ${var-DEFAULT} 如果var没有被声明, 那么就以$DEFAULT作为其值 * ${var:-DEFAULT} 如果var没有 ...
- linux的string操作(字符串截取,长度计算)
按指定的字符串截取 1.第一种方法: ${varible##*string} 从左向右截取最后一个string后的字符串 ${varible#*string}从左向右截取第一个string后的字符串 ...
- 已知一个字符串S 以及长度为n的字符数组a,编写一个函数,统计a中每个字符在字符串中的出现次数
import java.util.Scanner; /** * @author:(LiberHome) * @date:Created in 2019/3/6 21:04 * @description ...
随机推荐
- centos7 laravel 项目 npm install报错
npm install 初始化项目依赖的前端资源 报错 ERR xxx .. socket,symbol link is not supported ... 如果报错了 重新npm install ...
- layui table表格 表头与内容列错位问题(只有纵向滚动条的情况)
版本2.4.5 问题展示: 存在问题:正好错位一个纵向滚动条的宽度 思路: 仔细观察th元素及th包裹的子元素div 如下图 发现th宽度莫名的就多了5px 我就纳闷了 解决方案:到table.js ...
- condense 参数
" 删除左右空格,中间空格压缩至一格 result = condense( ' abc def ').result = condense( val = ' abc def '). " ...
- [转]Python十个高大上的语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手.不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了.本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并 ...
- SQL Server通过条件搜索获取相关的存储过程等对象
在SQL Server中,我们经常遇到一些需求,需要去搜索存储过程(Procedure).函数(Function)等对象是否包含某个对象或涉及某个对象,例如,我需要查找那些存储过程.函数是否调用了链接 ...
- Linux中crontab定时任务
crontab安装(centOS) yum -y install vixie-cron crontab语法(计划任务) crontab [-u user] file crontab [-u user] ...
- 清除Windows系统图标缓存
如果改变程序图标重新编译之后看到的图标并未改变,这可能不windows缓存了之前的图标导致的,需要清除Window的图标缓存来显示正确的图标. 下面是清除Windows系统图标缓存的批处理代码: re ...
- combination sum && combination sum II
1.Given a set of candidate numbers (candidates) (without duplicates) and a target number (target), f ...
- 【linux命令】chgrp改变文件或目录的属组
在lunix系统里,文件或目录的权限的掌控以拥有者及所诉群组来管理.可以使用chgrp指令取变更文件与目录所属群组,这种方式采用群组名称或群组识别码都可以.Chgrp命令就是change group的 ...
- mysql的repeat()函数
用来复制字符串,如下'ab'表示要复制的字符串,2表示复制的份数 mysql> select repeat('ab',2); +----------------+ | repeat('ab',2 ...