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

2131. 连接两字母单词得到的最长回文串

       

        题目描述:给定一个由双字母字符串组成的数组,求用这些单词能组成的最长回文串长度。我们需要通过分类讨论来解决这个问题。

对于xx型单词:

  • 奇数数量(如3个"aa"):可以左右各放一个,中间放一个
  • 偶数数量(如4个"aa"):可以左右各放两个

对于xy型单词:

  • 奇数数量(如3个"xy"和2个"yx"):可以左右各放两个,舍弃多余的
  • 偶数数量(如2个"xy"和2个"yx"):可以左右各放两个

总结规律:

  1. xx型单词:

    • 出现次数为偶数时:直接累加次数
    • 出现次数为奇数时:累加次数减1 可统一表示为:累加(总次数 - 次数%2)
  2. xy型单词: 累加 xy 和 yx 中出现次数较少者的两倍

        最后还需考虑是否存在奇数个xx型单词,因为可以将其放在回文串中心。

class Solution {
public:int longestPalindrome(vector<string>& words) {vector<vector<int>> cnt(26,vector<int>(26,0));for (auto w : words) {cnt[w[0] - 'a'][w[1] - 'a'] += 1;}int add = 0, odd = 0;for (int i = 0;i < 26;i++) {int c = cnt[i][i];add += c - c % 2;odd |= c % 2;for (int j = i + 1;j < 26;j++) {add += min(cnt[i][j],cnt[j][i]) * 2;}}return (add + odd) * 2;}
};

        时间复杂度:O(n)

        空间复杂度:O(26^2)

http://www.xdnf.cn/news/9081.html

相关文章:

  • 深入理解 JavaScript 异步编程与 Promise
  • Anaconda 的基础教程,从入门到精通
  • nt!MiAddViewsForSection函数分析
  • 树莓派4B 在系统环境安装snap7 西门子plc通讯包(佟掌柜专用)
  • 探索Facebook隐私保护背后的复杂技术实现
  • Lua 的速度为什么比 Python 快
  • React vs Vue.js:选哪个框架更适合你的项目?
  • 【Pandas】pandas DataFrame add_suffix
  • 项目评审方案,软件评审,需求评审、设计评审、编码评审、测试评审
  • Python 字符串相似度计算:方法、应用与实践
  • 华为云Flexus+DeepSeek征文 | Flexus X实例助力 Dify-LLM 一键部署:性能跃升与成本优化的革新实践
  • Docker 安全加固:从权限控制到敏感信息管理的全方位策略
  • adb.exe: more than one device/emulator
  • 鸿蒙5.0项目开发——接入有道大模型翻译
  • 数学--质数
  • 【Pycharm】文件夹一直显示正在加载
  • 嵌入式自学第二十八天(5.26)
  • JavaScript面试题之Promise
  • 厚铜PCB线路板厂会如何处理质量问题?
  • 算法题(156):雷达探测
  • MySQL 表的约束
  • 2025年- H52-Lc160--114. 二叉树展开为链表(前序遍历 + 用栈 + 原地修改)--Java版
  • Spring Cloud Gateway 限流实践:基于 Redis 令牌桶算法的网关层流量治理
  • 2025河北CCPC 题解(部分)
  • 第二章 1.2 数据采集过程中的安全性问题
  • 国外常用支付流程简易说明(无代码)
  • Leetcode 3562. Maximum Profit from Trading Stocks with Discounts
  • 视频检测AI智能分析网关V4摄像头异常位移检测算法全场景智能防护方案
  • “_snprintf”: 不是“std”的成员
  • 【监控】Blackbox Exporter 黑盒监控