题目在这:​​https://leetcode-cn.com/problems/longest-palindrome/​

思路分析:

题目要求找到可以组成的最长的回文串。
注意这里是可以对题目中所给的字符串进行重新排列组合的。

首先我们建立所给字符串的哈希表。

经过不断的试错总结出一下规律:

  • 对于出现偶数次的字符,必定可以排序成回文字符。
  • 对于奇数字符:
  • 如果字符串中没有出现次数为1次的字符,且仅有一个出现奇数次数的字符,则回文字符串个数为 n(有一个可以放在中间)。
  • 如果字符串中没有出现次数为1次的字符,且有多个出现奇数次数的字符,则仅有其中一个奇数次数字符为n,其余为n-1 次。
  • 若字符串中有出现次数为1次的字符,则所有其他出现为奇数次数的字符串,都可组成n-1次回文字符。

完整代码

class Solution:
def longestPalindrome(self, s: str) -> int:

from collections import Counter
temp = False # 标志位,如果哈希表中有1的话为True 否则为False
hash_map = Counter(s)
print(hash_map)
res = 0

for j in hash_map:
if hash_map[j] == 1:
temp = True
res +=1
break

for i in hash_map: # 遍历 key
if hash_map[i] >1 and hash_map[i] % 2==0:
res += hash_map[i]

if hash_map[i] >1 and hash_map[i] % 2!=0:
if temp:
res += hash_map[i] -1
else:
res += hash_map[i]
temp = True
print(res)
return

不断试错后提交:

力扣(leetcode) 409. 最长回文串 ------- 提交击败了100%的Python3用户_leetcode

力扣(leetcode) 409. 最长回文串 ------- 提交击败了100%的Python3用户_python_02