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())