LeetCode - 409 - 最長迴文串

lemon_lyue發表於2020-03-19

一、題目

  • 難度簡單

  • 題目連結https://leetcode-cn.com/problems/longest-p...

  • 語言: PHP

  • 題目內容

    給定一個包含大寫字母和小寫字母的字串,找到通過這些字母構造成的最長的迴文串。
    在構造過程中,請注意區分大小寫。比如 “Aa” 不能當做一個迴文字串。
    注意:
    假設字串的長度不會超過 1010。
    示例 1
    輸入:
    “abccccdd”
    輸出:
    7
    解釋:
    我們可以構造的最長的迴文串是”dccaccd”, 它的長度是 7。

    二、解題

  • LeetCode給定函式體

    class Solution {
    
      /**
       * @param String $s
       * @return Integer
       */
      function longestPalindrome($s) {
    
      }
    }
  1. 解題

    思路:計算每個字母出現次數,將奇數減一,使之變為0或偶數,再將次數相加,若迴文數長度為偶數且上個迴圈中有減1,則可加到迴文數中間。

class Solution {

    /**
     * @param String $s
     * @return Integer
     */
    function longestPalindrome($s) {
        $arr = str_split($s);
        $value = array_count_values($arr);
        $length = 0;
        $reduct = 0;
        foreach ($value as $k => $item) {
            if ($value[$k] % 2 !== 0) {
                $value[$k] -= 1;
                $reduct++;
            }
            $length += $value[$k];
        }
        if ($reduct > 0 && $length % 2 === 0) {
            $length += 1;
        }
        return $length;
    }
}

提交結果:

PHP

宣告

部落格文章皆為本人碼字原創,在文章創作過程中借鑑了其他學者論文、專著及其他文獻等,本人皆會在參考文獻中註明,如若侵犯您版權,請聯絡本人刪除。轉載本內容需註明出處!

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章