【Python】反转字符串的很多很多种方法及部分解算法题应用

Desc: n/a

Overview

    • 1. 反转字符串
      • 1.1 切片法
      • 1.2 reverse 函数
      • 1.3 高阶函数 reduce
      • 1.4 递归
      • 1.5 堆栈
      • 1.6 语言特性无关的 for 循环
      • 1.7 列表推导表达式
    • 2. 解题应用
      • 2.1 判断回文字符串
      • 2.2 反转字符串中的单词(word)
    • Reference


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)的所有方法 详解

你可能感兴趣的:(#,Python,#,数据结构与算法,leetcode)