【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)的所有方法 详解
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值