当前位置: 首页 > 后端技术 > Python

反转字符串的5种方法

时间:2023-03-26 01:03:34 Python

今天遇到一个问题,就是实现一个反转字符串的函数,如下:编写一个函数,其功能是反转输入的字符串。输入字符串以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"]我自己做的,大概有以下几种方法。方法一如果不考虑题目中提到的“原地修改输入数组”,可以使用中间列表从列表尾部向前遍历,可以定义索引defreverseString_1(self,s)有以下两种方式:"""思路:使用一个中间变量temp,然后从s的末尾抽取,追加元素到temp:params::return:"""temp=[]foriinrange(len(s)):temp.append(s[len(s)-1-i])returntempdefreverseString_2(self,s):"""思路:和方法4一样,只是改变了实现方法(同如问题8的方法2中使用的反向循环):params::return:"""temp=[]foriinrange(len(s)-1,-1,-1):#inrange表示索引范围,len(s)-1表示遍历的第一个元素(即从最后一个元素开始遍历);#第一个-1表示最后一个位置,但是由于遍历范围右边没有闭合,所以这里其实是遍历第一个元素;#第二个-1代表步长,每次-1,即从后向前遍历temp.append(s[i])returntemp方法2想一想:倒转一个字符串其实可以转化为“swapping第一个和最后一个元素字符串”,例如:交换第一个和最后一个数字,第二个和最后一个第二个数字,第三个和最后一个最后一个数字位交换[1,2,3,4,5,6][6,5,4,3,2,1]这种情况下,可以定义2个指针,一个从第一个位向后遍历,一个从末尾遍历到之前;然后每次遍历交换2个位置的元素元素,遍历到中间的元素;defreverseString(self,s):""":types:List[str]:rtype:None不返回任何东西,就地修改s。"""i=0#第一个指针,从头开始遍历j=len(s)-1#第二个指针,从末尾开始遍历whilej>i:#如果j>i,一直循环直到两个指针遇到s[i],s[j]=s[j],s[i]#交换2个位置的元素i+=1j-=1returns方法3这个方法比较绕,提交的时候超时失败(系统给的数组太长),但是我我测试的时候给了几个数组,输出也可以倒序输出。思路是这样的:由于是倒序输出,所以可以交换第一个和第二个元素,然后交换第二个和第三个……直到第一个元素移到最后一个位置;但是还没结束,这只是把第一个元素移动到最后,需要重复上面的步骤,然后把原来的第二个元素(当前第一个元素)移动到倒数第二个位置(注意:此时不能移动最后一个元素)。按照上面的步骤将所有元素移动一次,defreverseString(self,s):"""思路::types:List[str]:rtype:None不返回任何东西,就地修改s。"""n=0whilen