leetcode 每日签到 409. 最长回文串

时间:2024-01-13 14:38:56

题目:

最长回文串

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

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

注意:

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

示例 1:

输入:

"abccccdd"

输出:

7

解释:

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

来源:leetcode

链接:https://leetcode-cn.com/problems/longest-palindrome/

代码:

class Solution:
def longestPalindrome(self, s: str) -> int:
a=collections.Counter(s)
num=0
count=0
if len(a)==1:
return len(s)
for i in a:
if a[i]%2==0:
num+=a[i]
elif a[i]>1:
num+=a[i]-1
count=1
else:
count=1
return num+count if len(s)!=0 else 0

大神代码:

class Solution:
def longestPalindrome(self, s):
ans = 0
count = collections.Counter(s)
for v in count.values():
ans += v // 2 * 2
if ans % 2 == 0 and v % 2 == 1:
ans += 1
return ans

leetcode 1:a+b

题目:

两数之和

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9

所以返回 [0, 1]

思路:用两层for循环超时,方法是遍历nums,用一个哈希表(字典)来存储nums中不满足target-nums[i]==哈希表.key的值与下标

例:nums=[3,2,4],target=6

遍历到3时,检测字典里是否存在6-3这个值。因为是第一次字典是空的,于是把{3:0}存入字典

遍历到2时,检测字典里是否存在6-2这个值。字典里没有,于是把{2:1}存入

遍历到4时,检测字典里是否存在6-4这个值。字典里存在,于是把{2:1}与这个nums[3]=4的下标增加到列表当中返回

代码

#两数之和
class Solution:
def twoSum(self, nums, target):
a=[]
ha={}
b=0
for i in range(len(nums)):
for j in list(ha.keys()):
if target-nums[i]==j:
a.append(ha[j])
a.append(i)
return a
ha[nums[i]]=i
a=Solution()
nums = [3,2,4]
target = 6
print(a.twoSum(nums,target))