【Python】反轉字符串的很多很多種方法及部分解算法題應用

Desc: n/a


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:

  1. leetcode - False
  2. level - 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())


Reference

  1. Python實現字符串反轉的幾種方法
  2. Python - 翻轉(reverse)字符串(string)的所有方法 詳解
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章