Desc: n/a
Overview
1. 反轉字符串
1.1 切片法
def reverse_string1(s: str) -> str:
return s[::-1]
1.2 reverse 函數
a.
def reverse_string2_a(s: str) -> str:
l = list(s)
l.reverse()
return "".join(l)
b.
def reverse_string2_b(s: str) -> str:
return "".join(reversed(s))
1.3 高階函數 reduce
def reverse_string3(s: str) -> str:
from functools import reduce
return reduce(lambda x, y: y + x, s)
爲什麼
y+x
可以實現反轉?
ex:s = "abcde"
;
first:x='a'; y='b'
y+x=>'b'+'a'=>'ba'
;
next:x='ba'; y='c'
y+x=>'c' + 'ba'=>'cba'
until:x='dcba'; y='e'
y+x=>'e' + 'dcba'=> 'edcba'
1.4 遞歸
def reverse_string4(s: str) -> str:
if len(s) <=1:
return s
return reverse_string4(s[1:]) + s[0]
1.5 堆棧
a. stack
def reverse_string5_a(s: str) -> str:
stack = list(s)
ans = ''
while len(stack) > 0:
ans += stack.pop()
return ans
b. deque
def reverse_string5_b(s: str) -> str:
from collections import deque
d = deque()
d.extendleft(s)
return "".join(d)
1.6 語言特性無關的 for 循環
def reverse_string6(s: str) -> str:
end_idx = len(s) - 1
ans = ""
for i in range(end_idx):
ans += s[end_idx - i]
return ans
1.7 列表推導表達式
和 1.6 寫法相近似
a. 使用負值索引
def reverse_string7_a(s: str) -> str:
return "".join[s[-i] for i in range(1, len(s) + 1)]
b. 使用 range 函數的 step
反向遍歷
def reverse_string7_b(s: str) -> str:
return "".join(s[i] for i in range(len(s) - 1, 0 - 1, -1))
2. 解題應用
2.1 判斷迴文字符串
ex:
leetcode
- Falselevel
- True
def is_plalindrome(s: str) -> str:
return s == reverse_string1(s)
2.2 反轉字符串中的單詞(word)
Example 1:
Input: "Let's take LeetCode contest"
Output: "s'teL ekat edoCteeL tsetnoc"
def func(s: str) -> str:
return " ".join(reverse_string1(word) for word in s.split())