当前位置: 首页 > news >正文

【Leetcode 每日一题】2131. 连接两字母单词得到的最长回文串

问题背景

给你一个字符串数组 w o r d s words words w o r d s words words 中每个元素都是一个包含 两个 小写英文字母的单词。
请你从 w o r d s words words 中选择一些元素并按 任意顺序 连接它们,并得到一个 尽可能长的回文串 。每个元素 至多 只能使用一次。
请你返回你能得到的最长回文串的 长度 。如果没办法得到任何一个回文串,请你返回 0 0 0
回文串 指的是从前往后和从后往前读一样的字符串。

数据约束

  • 1 ≤ w o r d s . l e n g t h ≤ 10 5 1 \le words.length \le 10 ^ 5 1words.length105
  • w o r d s [ i ] . l e n g t h = 2 words[i].length = 2 words[i].length=2
  • w o r d s [ i ] words[i] words[i] 仅包含小写英文字母。

解题过程

这题也是经典的分析清楚之后,代码很好写。
由于所有字符串长度都是 2 2 2,那么两个字符不同的字符串可以分布到整个字符串的两端,可选数量以对应的两种字符串中数量较少的为准。
两个字符相同的字符串如果总数为偶数,那么可以全部用上,分布到字符串两端;如果总数为奇数,那么可以用上其中的偶数个。
此外,如果存在奇数个字符相同的字符串,那么还可以放一个在字符串中间。

具体实现

class Solution {public int longestPalindrome(String[] words) {int[][] count = new int[26][26];for (String word : words) {count[word.charAt(0) - 'a'][word.charAt(1) - 'a']++;}int res = 0;int odd = 0;for (int i = 0; i < 26; i++) {int cur = count[i][i];res += cur - cur % 2;odd |= cur % 2;for (int j = i + 1; j < 26; j++) {res += Math.min(count[i][j], count[j][i]) * 2;}}return (res + odd) * 2;}
}
http://www.xdnf.cn/news/636427.html

相关文章:

  • 39.组合总和
  • leetcode560-和为k的子数组
  • arxml文件
  • JVM 的类加载机制
  • 进程管理(第二、三、四章)
  • 【车用永磁同步电机随机开关频率控制策略:高频谐波抑制的工程实践】
  • Python入门手册:条件判断
  • 云原生安全之网络IP协议:从基础到实践指南
  • mysql都有哪些锁?
  • 历年北京理工大学保研上机真题
  • 分布式缓存:ZSET → MGET 跨槽(cross‐slot)/ 并发 GET解决思路
  • 第十九章:数据治理之数据指标(一):数据指标工具之【指标口径管理系统】与【指标数据查询系统】
  • AnyIOasyncio 现代化方法
  • Ntfs!NtfsReadBootSector函数分析之nt!CcGetVacbMiss中得到一个nt!_VACB结构
  • 李宏毅《机器学习2025》笔记 第二讲 —— AI Agent
  • Dubbo与OpenFeign的区别
  • Apache 高级配置实战:从连接保持到日志分析的完整指南
  • 用python实现中国象棋
  • Tool-Star新突破!RL赋能LLM多工具协同推理,性能全面超越基线方法
  • Linux的进程控制
  • 基于RedisBloom的JWT黑名单管理方案
  • 【2025】ubuntu22.04 docker安装全过程
  • Odoo 前端开发框架技术全面解析
  • Odoo: Owl Props 深度解析技术指南
  • Linux操作系统之进程(三):进程优先级与进程切换调度
  • npm幻影依赖问题
  • npm修改镜像的教程,将npm镜像修改为国内地址增加下载速度
  • SpringBoot-11-基于注解和XML方式的SpringBoot应用场景对比
  • 【微服务】SpringBoot 对接飞书审批流程使用详解
  • [Excel VBA]如何製作買三送一優惠條件的POS結帳介面?