如何利用Python对字符串反转,有多少方法
Admin 2022-08-23 群英技术资讯 282 次浏览
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
我们可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。
示例 1:
输入:["h","e","l","l","o"]
输出:["o","l","l","e","h"]
示例 2:
输入:["H","a","n","n","a","h"]
输出:["h","a","n","n","a","H"]
自己动手操作了一下,大概有如下几种方式
如果不考虑题目中所说的“原地修改输入数组”,可以借助一个中间列表来实现
从列表的尾部向前遍历,可以通过如下2种方式定义索引:
def reverseString_1(self, s): """ 思路:借助一个中间变量temp,然后从s的尾部提取,把元素追加到temp中 :param s: :return: """ temp = [] for i in range(len(s)): temp.append(s[len(s)-1-i]) return temp def reverseString_2(self, s): """ 思路:和方法4一样,不过换个实现方式(和第8题方法2用到的倒序循环一样) :param s: :return: """ temp = [] for i in range(len(s)-1, -1, -1): # range中的表示索引范围,len(s)-1表示遍历的第一个元素(也就是从最后一个元素开始遍历); # 第一个-1表示最后一个位置,不过由于遍历范围右边不闭合,所以这里其实最终遍历的是第一个元素; # 第二个-1表示步长,每次-1,即从后往前遍历 temp.append(s[i]) return temp
思考一下:
反转字符串其实可以转换为“首尾元素串互换”,如:第1位和倒数第1位互换、第2位和倒数第2位互换、第3位和倒数第3位互换
[1,2,3,4,5,6]
[6,5,4,3,2,1]
这样的话,可以定义2个指针,一个从首位遍历往后遍历,一个从末尾往前遍历;
然后每次遍历都交换2个位置的元素,一直遍历到中间元素;
def reverseString(self, s): """ :type s: List[str] :rtype: None Do not return anything, modify s in-place instead. """ i = 0 # 第一个指针,从首部遍历 j = len(s) - 1 # 第二个指针,从尾部遍历 while j > i: # 如果j>i就一直循环,直到2个指针相遇 s[i], s[j] = s[j], s[i] # 交换2个位置的元素 i += 1 j -= 1 return s
这个方法比较绕,而且在提交时,由于超时导致并未通过(系统给出的数组太长导致),不过自己测试时给了几个数组,也能正常倒序输出
思路如下:既然是倒序输出,可以把第1个和第2个元素互换,然后第2个和第3个互换…直到把第1个元素挪到了最后的位置;
但是此时还未结束,这只是把第1个元素挪到了最后,还需要重复上述步骤,再把原先的第2个元素(现在的第1个元素)挪到倒数第2个位置(注意:此时的最后一个元素不能动)
按照上述步骤,把所有元素都挪动一遍,就完成了
def reverseString(self, s): """ 思路: :type s: List[str] :rtype: None Do not return anything, modify s in-place instead. """ n = 0 while n < len(s): i = 0 for j in range(1, len(s)-n): s[i], s[j] = s[j], s[i] i += 1 n += 1 return s
利用切片来实现倒序输出:
def reverseString(self, s): """ 思路:切片 s[::-1]表示反转s中的元素 s[:]表示数组中所有子模块 s[:]=s[::-1]表示将原数组反转后赋值给s中每一个对应的位置 s=s[::-1]表示将s反转后赋值给新的对象s,与题意原地修改不符 :param s: :return: """ s[:] = s[::-1] return s
使用reverse()方法,它会对原列表进行反向排序(注意:reverse只对list有效)
def reverseString_6(self, s): """ :param s: :return: """ s.reverse() return s
不过reverse()方法的源码,会发现它其实就是利用的切片,如下:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能,这篇文章主要介绍了python开发的自动化运维工具ansible详解,需要的朋友可以参考下
假如我写了一个函数 fdef f(): print('hello')之后我想知道这段函数执行所要的时间,这好办,我只要将代码改为如下就行import timedef f(): start = time.time()
对python 调用类属性的方法详解测试时候类的调用是经常会用到的,下面这篇文章主要给大家介绍了关于Python类属性和方法的调用的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
pytest提供了许多运行命令以供定制化运行某一类测试用例或者某个测试用例等,下面这篇文章主要给大家介绍了关于pytest用例间参数传递的两种实现方式,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
这篇文章主要介绍了如何从Python的cmd中获得.py文件参数操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008