Leecode 409. 最长回文串

简介: Leecode 409. 最长回文串

题目描述:

给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串

在构造过程中,请注意区分大小写。比如 “Aa” 不能当做一个回文字符串。

注意:

假设字符串的长度不会超过 1010。

示例 1:

输入:

“abccccdd”

输出:

7

解释:

我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。

解题思想:遇到有提示字符串仅包含小写(或者大写)英文字母的题,都可以试着考虑能不能构造长度为26的每个元素分别代表一个字母的数组,来简化计算

class Solution {
    public int longestPalindrome(String s) {
      int[] cnt = new int[58];
      for (char c : s.toCharArray()) {
        cnt[c - 'A'] += 1;
      }
      int ans = 0;
      for (int x: cnt) {
        // 字符出现的次数最多用偶数次。
        //x与1进行逻辑与运算,如果x是偶数,则x & 1 = 0;如果x是奇数,则x & 1 = 1.
        ans += x - (x & 1);
      }
      // 如果最终的长度小于原字符串的长度,说明里面某个字符出现了奇数次,那么那个字符可以放在回文串的中间,所以额外再加一。
      return ans < s.length() ? ans + 1 : ans;  
    }
}


相关文章
|
26天前
leecode 移动零
给定数组`nums`,编写函数将所有0移动至数组末尾,同时保持非零元素的相对顺序。要求在不复制数组的情况下原地操作。示例:输入`[0,1,0,3,12]`,输出`[1,3,12,0,0]`。代码实现使用双循环遍历数组,找到0并交换位置。
|
3月前
|
存储
72. 编辑距离、198.打家劫舍、213_打家劫舍2(12021-11-06)
72. 编辑距离、198.打家劫舍、213_打家劫舍2(12021-11-06)
26 0
|
3月前
|
算法
lanqiao OJ 1366 spfa最短路
lanqiao OJ 1366 spfa最短路
27 0
|
8月前
|
算法 测试技术 C语言
leecode算法题之数组
leecode算法题之数组
|
8月前
Leecode之反转链表
Leecode之反转链表
Leecode 5. 最长回文子串
Leecode 5. 最长回文子串
50 1
|
存储 算法 测试技术
【AcWing每日一题】4653. 数位排序
【AcWing每日一题】4653. 数位排序
126 0
|
人工智能
线性DP——AcWing 898. 数字三角形、AcWing 895. 最长上升子序列
线性DP——AcWing 898. 数字三角形、AcWing 895. 最长上升子序列
86 0
Leecode 18. 四数之和
Leecode 18. 四数之和
60 0
Leecode 169. 多数元素
Leecode 169. 多数元素
46 0