天天看點

[力扣c語言實作]409. 最長回文串1. 題目描述2.代碼如下

409. 最長回文串

  • 1. 題目描述
  • 2.代碼如下

1. 題目描述

給定一個包含大寫字母和小寫字母的字元串,找到通過這些字母構造成的最長的回文串。

在構造過程中,請注意區分大小寫。比如 “Aa” 不能當做一個回文字元串。

注意:

假設字元串的長度不會超過 1010。

示例 1:

輸入:

“abccccdd”

輸出:

7

解釋:

我們可以構造的最長的回文串是"dccaccd", 它的長度是 7。

來源:力扣(LeetCode)

連結:https://leetcode-cn.com/problems/longest-palindrome

著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。

2.代碼如下

//最長回文串:(從前至後或者從後至前周遊都是一樣的字元串 )

//思路:将字元串的出現的次數與字元串建立映射關系,由回文串的特點知道,相同字元出現的次數為偶數,則一定可以參與構成回文串,為奇數則表明該回文串可以有一個中心字元串。

2019-04-27
int longestPalindrome(char * s){
//若生成的字元串為回文字元串,需要除了中心字元,其餘字元隻要頭部出現,尾部就要對應出現。
    int len = 0;
    int centerlag = 0;
    int hash_map[128] = {0};
    for(int i =0;s[i]!='\0';i++)
    {
        hash_map[s[i]]++;
    }
    for(int i =0;i<128;i++)
    {
        if(hash_map[i]%2==0)
        {
            len += hash_map[i];
        }
        else
        {
            len += hash_map[i]-1;
            centerlag = 1;
        }
    }
    
    if(centerlag)
    {
        return len+=1;  
    }
    else
    {
        return len;
    }
}