难度:medium
题目描述
给你一个字符串 s,找到 s 中最长的回文子串。
示例 1:
输入:s = “babad”
输出:“bab”
解释:“aba” 同样是符合题意的答案。
思路
由于是找回文串,可以采用中心扩展的方法,遍历每个中心点位置,尽可能大的向左右两边扩展。最后取一个最好的中心点即可。
class Solution(object):
def longestPalindrome(self, s):
"""
:type s: str
:rtype: str
"""
max_len = 0
ans_str = ""
for center in range(len(s)):
str1 = self.ExpandfromCenter(s,center,center) ##"babad"->"aba"
str2 = self.ExpandfromCenter(s,center,center+1)##"abbc"->"bb"
if len(str1) > max_len:
max_len = len(str1)
ans_str = str1
if len(str2) > max_len:
max_len = len(str2)
ans_str = str2
return ans_str
def ExpandfromCenter(self,s,left,right):##向左右两边扩展
while(left>=0 and right<len(s) and s[left]==s[right]):
left -= 1
right += 1
return s[left+1:right]
w这道题好像有点简单…那么再写一道简单题吧。括号匹配?简单吧。
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。
虽然这道题很简单,但是第一次用python写还是有一些东西要记录的。毕竟,遇到字符串的时候就会很恨c++。
class Solution(object):
def isValid(self, s):
"""
:type s: str
:rtype: bool
"""
Stack = []
pair_dic = {"}":"{",")":"(","]":"["}
for i in range(len(s)):
char = s[i]
if char in pair_dic.values():
Stack.append(char)
if char in pair_dic.keys():
if len(Stack) == 0 or Stack[-1] != pair_dic[char]:
return False
Stack.pop()
return len(Stack) == 0
✨ python里实现栈:
可以直接用列表来实现栈。
- append: 相当于栈的push()
- pop(): 相当于栈的pop(), 会删除末尾的元素
- pop(0): 相当于队列的pop(),会删除开头的元素
- insert(0,元素):在列表开头插入元素