leetcode:3. 无重复字符的最长子串
问题描述:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
解法:滑动窗口,元素如果不在字典里面,就右移右边界(扩大);元素在字典里面,就右移左边界(缩小)。通过右边界的指针循环遍历,直到右边界达到末尾。因为左边界最多比右边界在右边一位,因而不用规定左边界。
时间复杂度:O(1)
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
l = 0
r = -1
dict1 = {}
res = 0
while r < len(s) - 1:
if dict1.get(s[r + 1], 0) == 0:
r += 1
dict1[s[r]] = 1
else:
dict1[s[l]] -= 1
l += 1
res = max(res, r-l+1)
return res
leetcode:125. 验证回文串
问题描述:给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
解法:双指针,str.isalnum() 方法-检测字符串是否由字母和数字组成。str.upper() 方法-字符串中的小写字母转为大写字母。
时间复杂度:O(n)
# 法一:双指针
class Solution:
def isPalindrome(self, s: str) -> bool:
s = [i for i in s.upper() if i.isalnum()]
l = 0
r = len(s) - 1
while l < r:
if s[l] != s[r]:
return False
else: