• LeetCode 409. 最长回文串


    我的LeetCode:https://leetcode-cn.com/u/ituring/

    我的LeetCode刷题源码[GitHub]:https://github.com/izhoujie/Algorithmcii

    LeetCode 409. 最长回文串

    题目

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

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

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

    示例 1:

    输入:
    "abccccdd"

    输出:
    7

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

    解题思路

    思路1-回文的特征是所有字符都是偶数次且最多有一个是奇数次

    1. 字符转数组统计字母出现的次数;
    2. 累加所有出现过的单个字母最多偶数次;
    3. 若累加和小于源字符串长度,则说明可以额外取一个字母放在回文串的中间位置;

    总结:分析回文串的特征,统计字母这类位置连续的数据可转化为数组,更方便高效

    算法源码示例

    package leetcode;
    
    /**
     * @author ZhouJie
     * @date 2020年3月19日 下午12:25:32 
     * @Description: 409. 最长回文串
     *
     */
    public class LeetCode_0409 {
    
    }
    
    class Solution_0409 {
    	/**
    	 * @author: ZhouJie
    	 * @date: 2020年3月19日 下午1:01:45 
    	 * @param: @param s
    	 * @param: @return
    	 * @return: int
    	 * @Description: 1-
    	 *
    	 */
    	public int longestPalindrome(String s) {
    		int len = 0;
    		if (s == null || (len = s.length()) < 2) {
    			return len;
    		}
    		int[] all = new int['z' - 'A' + 1];
    		// 统计所有字母出现次数
    		for (int i = 0; i < len; i++) {
    			all[s.charAt(i) - 'A']++;
    		}
    		int maxLen = 0;
    		for (int i : all) {
    			// 最多取其偶数次
    			maxLen += i - (i & 1);
    		}
    		return maxLen < len ? ++maxLen : maxLen;
    	}
    }
    
  • 相关阅读:
    第二周学习总结
    第一周学习进度总结
    淘宝网质量属性分析
    软件架构师如何工作
    寒假学习记录第十六天
    寒假学习记录第十五天
    寒假学习记录第十四天
    寒假学习记录第十三天
    三.NFS存储服务
    二.Rsync备份服务
  • 原文地址:https://www.cnblogs.com/izhoujie/p/12523628.html
Copyright © 2020-2023  润新知