1. 兩數之和
兩數之和
方法1:暴力枚舉
兩次for 循環,記錄索引和值,找到合適的值然后返回
方法2:使用哈希表
第一次for循環的時候,就可以使用哈希表記錄key的value,可以實現時間復雜度是1,要分清楚哈希表的key和value的對應關系
class Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:# method 1 暴力枚舉# for index1, i in enumerate(nums):# for index2, j in enumerate(nums):# if i+j == target and index1 != index2:# return [index1, index2]# method 2 暴力枚舉# for i in range(len(nums)):# for j in range(len(nums)):# if i!=j and nums[i] + nums[j] == target:# return [i, j]# method 3 使用哈希表,快速尋找是否存在目標元素hashtable = dict()for i, num in enumerate(nums):if target - num in hashtable:return [hashtable[target - num ], i]else:hashtable[num] = i
2. 驗證回文串
驗證回文串
將所有大寫字符轉換為小寫字符、并移除所有非字母數字字符
解題思路:雙指針
Python中處理字符串之isalpha()方法的使用:用于判斷字符串是否全部由字母組成。string.isalpha(),string是要檢查的字符串。該方法返回True或False,表示字符串是否全部由字母組成
Python中處理字符串之isalnum()方法的使用:其作用是檢查一個字符串是否由字母或數字組成。只要字符串中包含了非字母或非數字的字符,該函數就返回False,空字符串也會返回False.也就是說,字符串中只在由字母、一種語言的字符、數字或字母及數字組成的情況下才返回True.
- isalpha() 只能判斷字符串是否只包含字母字符(包括字母和其他語言的字符),而不包括數字或其他特殊字符。數字+字母是false
- isalnum() 則可以判斷字符串是否同時包含字母和數字字符,只有當字符串中包含字母和數字字符時才會返回 True,否則返回 False。含有特殊字符才是False
區別參考鏈接
- upper() 方法將字符串轉換為大寫字母
- lower() 方法將字符串轉換為小寫字母
雙指針解法:
class Solution:def isPalindrome(self, s: str) -> bool:sgood = "".join([i.lower() for i in s if i.isalnum()])n = len(sgood)left, right = 0 , n-1while left < right:if sgood[left] != sgood[right]:return Falseelse:left += 1right -=1return True
優雅解法:
class Solution:def isPalindrome(self, s: str) -> bool:sgood = "".join(ch.lower() for ch in s if ch.isalnum())return sgood == sgood[::-1]