Leetcode 409最長の回文文字列----パイソン

1.タイトル説明

文字回文配列で最長のを見つけるように設定備える大文字と小文字の文字列を、与えられました。
建設プロセスでは、大文字と小文字を区別しますのでご注意ください。以下のような「Aaが」回文文字列として使用することはできません。
注意
文字列の長さが1010以下であると仮定。

例1
入力:
「abccccdd」
出力を:
7
説明:
私たちは、最長の文字列が回文「dccaccd」で構築することができ、その長さは7です。

2.問題解決のアイデア

パリンドローム配列は特徴
偶数の合計長さのいずれかが奇数であってもよいことはパリンドローム配列を
、例えば:CAAC(全長が偶数である)
CCACC(全長が奇数である)のような、

これは、問題解決のアイデアにつながる
(1)カウントに文字の文字列の出現回数が偶数の場合は、直接回文構造に形成することができる
(2)文字の指定した文字列が出現カウント傑作場合、カウントは選択することができます-1回文として、最終的には、最も長い文字列回文時間プラス1の全長を返すこと最大文字の出現のパリンドローム配列の中間の奇数番号を入れて示し

例えば
指定された文字列:atttnrca
前記文字の出現回数の各々 :2、T 3 、N:1、R:1、C:1
までは、パリンドローム配列で形成されてもよい:AT T TA

3.コードの実装

class Solution:
    def longestPalindrome(self, s: str) -> int:
        flag = False#用来判断是否有出现次数为奇数的
        sumCount = 0#累计字母出现次数
        setS = set(s)
        #若字符串个数为1或字符串类似于‘ccc’,则直接返回字符串的长度
        if(len(setS) == 1):
            return len(s)
        for i in setS:
            if(s.count(i)%2 == 0):#若字母出现次数为偶数次,则直接相加次数
                sumCount = sumCount + s.count(i)
            else:#若字母出现次数为奇数次,则可以每次取该字母的偶数个数,形成对称
                sumCount = sumCount + s.count(i) - 1
                flag = True
        if(flag):#如果有出现次数为奇数的,则可以选择奇数中的一个字母放在字符串的中间,所以加1
            return sumCount + 1
        else:
            return sumCount

ここに画像を挿入説明

おすすめ

転載: blog.csdn.net/u013075024/article/details/93309852