原题链接:https://leetcode-cn.com/problems/reverse-string/
题目描述:
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[]
的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。
思路:将原来列表元素,反向添加至原列表的后面,然后删除前面的len(原列表)个元素,剩下的就是新添加的元素——即:反向元素。
关键:(1)range()函数,可以倒序输出
(2)删除元素时,列表长度一直在变,如何确保删除前length个元素?
A:永远只删除首个元素,类似于pop(),直到列表长度恢复到原始值。
(3)最开始,使用origin_str = origin_str[length:],希望截取列表的后半段,一步到位,但是报错。
原因是:origin_str[length;]这种方式,实际上是在复制到了一新的列表,并没有在原列表上操作。
代码:
1 class Solution:
2 def reverseString(self, origin_str):
3 #origin_str = list(origin_str)
4 length = len(origin_str)
5 #print(origin_str)
6 for i in range(length-1, -1, -1):
7 ob = origin_str[i]
8 origin_str.append(ob)
9 #print(origin_str)
10
11 #origin_str = origin_str[length:]
12 while len(origin_str) != length:
13 del origin_str[0]
14 print(origin_str)
15 #return origin_str