力扣2131——连接两字母单词得到的最长回文串(贪心+哈希表)
题目(中等)
给你一个字符串数组 words 。words 中每个元素都是一个包含 两个 小写英文字母的单词。
请你从 words 中选择一些元素并按 任意顺序 连接它们,并得到一个 尽可能长的回文串 。每个元素 至多 只能使用一次。
请你返回你能得到的最长回文串的 长度 。如果没办法得到任何一个回文串,请你返回 0 。
回文串 指的是从前往后和从后往前读一样的字符串。
示例 1:
输入:words = [“lc”,“cl”,“gg”]
输出:6
解释:一个最长的回文串为 “lc” + “gg” + “cl” = “lcggcl” ,长度为 6 。
“clgglc” 是另一个可以得到的最长回文串。
示例 2:
输入:words = [“ab”,“ty”,“yt”,“lc”,“cl”,“ab”]
输出:8
解释:最长回文串是 “ty” + “lc” + “cl” + “yt” = “tylcclyt” ,长度为 8 。
“lcyttycl” 是另一个可以得到的最长回文串。
示例 3:
输入:words = [“cc”,“ll”,“xx”]
输出:2
解释:最长回文串是 “cc” ,长度为 2 。
“ll” 是另一个可以得到的最长回文串。“xx” 也是。
提示:
1 <= words.length <= 105
words[i].length == 2
words[i] 仅包含小写英文字母。
思路
看数据范围,1e5,用暴力两两配对尝试必然超时,所以用哈希表分情况计数;
对于叠词,如果成对出现,可以加入答案,如果有单独的,只能在中间多加一个;
对于普通词tmp,能配对的只有它和它回文符串couple,这两个字符串中出现次数最小的min(nomal[tmp], nomal[couple])次数才能配对成功,多余部分不能加入答案。
为避免重复计数,每次加入后清除该字符串的计数
代码
class Solution {public:int longestPalindrome(vector<string>& words) {int ans = 0;unordered_map<char, int> same; //存叠词及其出现次数unordered_map<string, int> nomal; //存普通词及其次数for(auto word : words) {if(word[0] == word[1]) same[word[0]]++;else nomal[word]++;}int flag_same = 0;for(auto x : same) {if(x.second % 2 == 0) ans += x.second * 2; //成对叠词可组队else {flag_same = 1;ans += (x.second / 2) * 4; //偶数部分配对}}ans += flag_same * 2; //最多允许一个叠词横跨for(auto x : nomal) {string tmp = x.first;if(nomal[tmp] == 0) continue;string couple;couple.push_back(tmp[1]);couple.push_back(tmp[0]);ans += min(nomal[tmp], nomal[couple]) * 4;nomal[tmp] = 0;nomal[couple] = 0;}return ans;}
};
力扣2131——连接两字母单词得到的最长回文串(贪心+哈希表)相关推荐
- LeetCode 2131. 连接两字母单词得到的最长回文串
文章目录 1. 题目 2. 解题 1. 题目 给你一个字符串数组 words .words 中每个元素都是一个包含 两个 小写英文字母的单词. 请你从 words 中选择一些元素并按 任意顺序 连接它 ...
- Leetcode69场双周赛-第三题5962. 连接两字母单词得到的最长回文串
5962. 连接两字母单词得到的最长回文串 题目描述 解题思路和解题代码 定义map和sameMap.如果两个字母一样,就看sameMap里面有没有记录,有的话把该记录取出来,结果总数+4,没有的话, ...
- python【力扣LeetCode算法题库】409-最长回文串(数学 计数器)
最长回文串 给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串. 在构造过程中,请注意区分大小写.比如 "Aa" 不能当做一个回文字符串. 注意: 假设字 ...
- Python中判断字符是否为字母、数字、字母和数字组合,验证回文串(LeetCode125)
判断字符串是否为字母.数字 函数str.isdigit()判断字符是否为数字,函数str.isalpha()判断字符是否为字母,函数isalnum()判断字符是否为数字字母组合. 上代码: str1 ...
- 力扣HOT100算法题5:最长回文字串
文章目录 一.题目 二.方法一:解题思路 三.方法一:代码解析 四.方法二:动态规划 五.方法二:代码解析 一.题目 给你一个字符串 s,找到 s 中最长的回文子串. 示例 1:输入:s = &quo ...
- 力扣Leetcode:5. 最长回文子串(Python)
题目描述 给你一个字符串 s,找到 s 中最长的回文子串. 题解:动态规划 这是一道很经典的题目.首先我想到了动态规划算法: 对于子串s[i-j],它为回文子串的条件为:s[i+1 - j-1]为回文 ...
- leetcode 高薪_利用两种不同的方法解LeetCode第1312题:让字符串成为回文串的最少插入次数
题目描述(难度困难) 给你一个字符串 s ,每一次操作你都可以在字符串的任意位置插入任意字符.请你返回让 s 成为回文串的 最少操作次数 . 「回文串」是正读和反读都相同的字符串. 示例 1: 输入: ...
- 2022-01-22:力扣411,最短独占单词缩写。 给一个字符串数组strs和一个目标字符串target。target的简写不能跟strs打架。 strs是[“abcdefg“,“ccc“],tar
2022-01-22:力扣411,最短独占单词缩写. 给一个字符串数组strs和一个目标字符串target.target的简写不能跟strs打架. strs是["abcdefg", ...
- 力扣--让字符串成为回文串的最少插入次数
力扣–让字符串成为回文串的最少插入次数 文章目录 力扣--让字符串成为回文串的最少插入次数 一.题目描述 二.分析 三.代码 相关题目: 腾讯–构造回文:腾讯–构造回文 最长回文子串和回文链表:最长回 ...
最新文章
- 某程序员对比美团和阿里的卷文化区别:美团重过程,死抠没用细节;阿里更自由,注重结果!...
- “芯”战争,人工智能芯片研发攻略
- BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [
- IOS基础之UIDynamicAnimator动力学入门-02
- 扩展entity framework core实现默认字符串长度,decimal精度,entity自动注册和配置
- android sd卡不可写,Android检查SD卡是否可读写
- Mysql事务探索及其在Django中的实践(二)
- [2019.3.25]多项式求逆
- [数据模型] 数据表三种关联的概述
- kali扫描内网ip_kali linux 如何查找局域网ip
- 本地数据库数据导入linux
- mui项目php,基于h5+的app 开发介绍、hui、mui介绍、项目部署
- 国内使用谷歌地图方案
- Zbrush curve Tube ,Move topologica笔刷的使用
- 下一关口令:别犹“豫”,看“浙”里,一起“皖”
- 灰灰考研c语言讲义,【灰灰考研】操作系统复习全书.pdf
- 解决:mmc0: error -110 whilst initialising SD card.md
- CAD小问题解决办法1
- 微信小程序授权微信手机号踩坑,第一次无法获取到手机号,第二次成功的解决方案
- Prior-Induced Information Alignment for Image Matting
热门文章
- 试编写汇编语言程序,要求从键盘接收一个四位的十六进制数,并在终端上显示与它等值的二进制数
- (学无止境)linux 虚拟机联网
- rocket MQ 实战应用
- liunx内置计算器bc工具
- 计算机磁盘利用100,笔记本电脑磁盘占用率高达100%怎么处理
- java利用poi模板导出word文件
- VUE中让字体大小跟随窗口变化
- Power-law Distributions(幂律分布)
- 锁定计算机后点鼠标屏幕无反应,电脑鼠标点击桌面没有反应怎么办
- c语言在windows和mac,c语言在windows下和Mac下的不同表现!