Reverse String
Example 1:
Input: s = ["h","e","l","l","o"] Output: ["o","l","l","e","h"]
Example 2:
Input: s = ["H","a","n","n","a","h"] Output: ["h","a","n","n","a","H"]
class Solution:
2def reverseString(self, s: List[str]) -> None:
3"""
4Do not return anything, modify s in-place instead.
5"""
6#Input: s = ["h","e","l","l","o"]
7
8start = 0
9end =len(s)-1
10
11
12while start<end:
13s[start], s[end] = s[end], s[start]
14start+=1
15end-=1
16
17
18return s
Reverse Integer
Example 1:
Input: x = 123 Output: 321
Example 2:
Input: x = -123 Output: -321
Example 3:
Input: x = 120 Output: 21
class Solution:
2def reverse(self, x: int) -> int:
3#Input: x = 123
4#Output: 321
5
6if x>0:
7a=str(x) #Input: x = 123是int, 要改成string 才能[::-1]
8b=a[::-1] # 321
9ans=int(b)
10else:
11a=str(x*-1) # 乘以負號讓它變正
12b=a[::-1] # 變正後進行扭轉
13ans=-int(b) # 扭轉完成再把負號加回去
14
15# 考虑溢出
16if ans<2**31-1 and ans>=-2**31 :
17return ans
18else:
19return 0
20'''
21[::-1] 顺序相反操作
22[-1] 读取倒数第一个元素
23[3::-1] 从下标为3(从0开始)的元素开始翻转读取
24
25a=[1,2,3,4,5]
26print(a)
27[ 1 2 3 4 5 ]
28
29[ : n] 代表列表中的第一項到第n項
30
31print(a[-1]) 取最後一個元素
32結果:[5]
33
34print(a[:-1]) 除了最後一個取全部
35結果:[ 1 2 3 4 ]
36
37print(a[::-1]) 取從後向前(相反)的元素
38結果:[ 5 4 3 2 1 ]
39
40print(a[3::-1]) 取從下標為3的元素翻轉讀取 結果:[4 3 2 1 ]
42
43print(a[1:]) 取第二個到最後一個元素
44結果:[2 3 4 5]
45
46print(a[::-2]) 倒數跳兩格
47結果:[5, 3, 1]
48
49print(a[::2]) 往前跳兩格
50結果:[1, 3, 5]
5146https://cloud.tencent.com/developer/article/1608978
47'''
First Unique Character in a String
class Solution:
def firstUniqChar(self, s: str) -> int:
dic={}
for i in range(len(s)):
if s[i] in dic:
dic[s[i]]="#"
else:
dic[s[i]]=i
for d in dic:
if dic[d]!="#":
return dic[d]
return -1 |
class Solution:
2def firstUniqChar(self, s: str) -> int:
3#Input: s = "leetcode"
4
5worddict = Counter(s)
6print(worddict)
7#計算個欄位的數量
8#Counter({'e': 3, l': 1, 't': 1, 'c': 1, 'o': 1, 'd': 1})
9#Counter 是 Python 裡面自帶的模組,可以快速統計 List 內的元件,數量由大到小排序。
10
11for idx, ele in enumerate(s): #列舉 枚舉 #idx代表位置 ; ele元素名稱
12if worddict[ele] >= 2: # has duplicate
13pass #沒有意義 但因為if內必須至少有一行code
14else: # no duplicate
15return idx
16
17return -1
18
19
20'''
21https://www.wongwonggoods.com/all-posts/interview_prepare/python_leetcode/leetcode-python-387/
22counter 屬於 dict 的子資料型態,是專門設計用來計數的,
23我們將一個內容丟入 counter 中,
24會回傳一個相當於 dict 的資料型態,
25其中 key 代表的是「對應的元素」,而 value 代表的是「對應的數量」,
26我們可以直接把內容丟入 counter,並得到結果。
27
28https://www.runoob.com/python/python-func-enumerate.html
29
30for 循环使用 enumerate
31>>> seq = ['one', 'two', 'three']
32>>> for i, element in enumerate(seq):
33... print i, element
34...
350 one
361 two
372 three
38'''
Valid Anagram
Example 1:
Input: s = "anagram", t = "nagaram" Output: true
Example 2:
Input: s = "rat", t = "car" Output: false
class Solution:
def isAnagram(self, s: str, t: str) -> bool:
#Input: s = "anagram", t = "nagaram"
if sorted(s)==sorted(t):
return True
else:
return False
class Solution:
def isAnagram(self, s: str, t: str) -> bool:
dic={}
dic2={}
if len(s)!=len(t):
return False
for i in range(len(s)):
if s[i] in dic:
dic[s[i]]+=1
else:
dic[s[i]]=1
if t[i] in dic2:
dic2[t[i]]+=1
else:
dic2[t[i]]=1
if dic==dic2:
return True
else:
return False |
Valid Palindrome
Your input
"0P"
class Solution:
def isPalindrome(self, s: str) -> bool:
#中文當中是指倒正著念和反著念都相同的句子
#Input: s = "A man, a plan, a canal: Panama"
#Input: s = "A ma MA"
#Two pointers
sta=0
end=len(s)-1
s = s.lower() #把字串裡面所有字元變成小寫
while sta<end:
if not s[sta].isalnum(): #確認字元是否為 「alphabet 與 numeric」字母和數字
sta+=1
elif not s[end].isalnum():
end-=1
elif s[sta]==s[end]: #如果前面 和 後面的字元一樣 就代表前後文一樣
sta+=1
end-=1
else:
return False
return True
'''
.lower()和.upper()要學
補充 isalpha(), isalnum()
因為本題敘述中提到 removing all non-alphanumeric characters,因此需要保留「alpha 與 numeric」,
不能只判斷 “字母” 使用 isalpha()。
'''
String to Integer (atoi)
Example 1:
Your input
"+-12"
"words of 108"
class Solution:
2def myAtoi(self, s: str) -> int:
3#Input: s = "42"
4
5s = s.lstrip() #lstrip() 函數用來去除字串左邊的空白字元。
6
7if not s:
8return 0
9
10i = 0
11sign = 1 #確認是屬於正數還是負數
12
13if s[i] == "+":
14i += 1
15elif s[i] == "-":
16i += 1
17sign = -1
18
19Ans = 0
20
21while i < len(s):
22curr = s[i]
23if not curr.isdigit(): #如果字符串只包含數字則返回 True 否則返回 False。
24break
25else:
26Ans = Ans * 10 + int(curr)
27
28i += 1
29
30Ans *=sign #乘以正數或負數
31
32if Ans > 2**31 - 1:
33return 2**31 - 1
34
35elif Ans < -2**31:
36return -2**31
37
38else:
39return Ans
41#補充 : Python isdigit() 方法只對 0 和 正數才有效。
#https://www.youtube.com/watch?v=YA0LYrKI1CQ&ab_channel=CrackingFAANG
43#https://badgameshow.com/steven/python/python-string-strip-lstrip-rstrip/
class Solution:
def myAtoi(self, s: str) -> int:
ans=""
s=s.strip()
for i in range(len(s)):
if i==0:
if s[i]=="-" or s[i]=="+" or s[i].isnumeric():
ans+=s[i]
else:
break
elif s[i].isnumeric():
ans+=s[i]
else:
break
if ans=="" or ans=="+" or ans=="-":
return 0
ans = int(ans)
if ans>2**31 - 1:
ans=2**31 - 1
elif ans<-2**31:
ans=-2**31
return ans |
44
Implement strStr()
class Solution:
def strStr(self, haystack: str, needle: str) -> int:
# 如果 needle 是空字串,根據題意應該返回 0
if not needle:
return 0
# 取得 haystack 和 needle 的長度
haystack_len = len(haystack)
needle_len = len(needle)
# 循環遍歷 haystack,直到剩餘的長度不可能包含 needle
for i in range(haystack_len - needle_len + 1):
# 如果從當前索引開始的子字串等於 needle,則返回當前索引
if haystack[i:i + needle_len] == needle:
return i
# 如果找不到 needle,返回 -1
return -1
これは小さな秘密で、見せたくないです7c752ee6-7026-4ae9-a5dd-af43bccb39d7
Longest Common Prefix
Your input
["a"]
["fl","flow",""]
prefix[:-1]
這個寫法表示從頭到倒數第二個字符的子序列:
prefix = "flower"
print(prefix[:-1]) # 輸出: "flowe"
這是因為 prefix[:-1]
意味著從索引 0 開始到索引 -1 之前的所有字符,-1
表示最後一個字符,
所以 [:-1]
相當於去掉最後一個字符。
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
# 取第一個字串作為基準
prefix = strs[0]
for string in strs[1:]:
# 逐字元比較
while string[:len(prefix)] != prefix:
# 當前綴不匹配時,縮短前綴
prefix = prefix[:-1]
return prefix
これは小さな秘密で、見せたくないです07c8e336-2105-43f2-a614-0e5cf44743f3
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
n=[]
for i in range(len(strs)):
n.append(len(strs[i]))
min_length=min(n)
i=0
while i < min_length:
char = strs[0][i]
for s in strs[1:]:
if s[i] != char:
return strs[0][:i]
i+=1
return strs[0][:i]
45