Problem: Write code to reverse a C-Style String (C-String means that “abcd” is represented as five characters, including the null character )
Solution: 代码在下面
分析(1) 确定两个指针分别指向字符串的头和尾部,交换这两个指针所指向的值,然后前移头指针后移尾指针。这样一直循环下去,直到两个指针指向同一位置。time: O(n), space: O(n)
(2)reverse2(str)这个是错误的写法,因为在python里面不支持对string类型的变量进行单个字符进行赋值,这一点类似java。
(3)这里使用了python里面的切片操作,这里就不用使用额外的空间了。time: O(n), space O(1)
(4) 看了论坛上有人提到了使用递归,但是使用递归每次都要计算子串的的长度,感觉这样的时间开销会比较大,除非使用特别的方法每次只是将源字符串的长度减一然后赋值给递归函数。
#!/usr/bin/python
# coding: utf-8
def reverse1(str):
length = len(str)
newStr = ''
for i in range(length):
newStr += str[length-i-1]
return newStr
def reverse2(str):
length = len(str)
i = 0
j = length - 1
while i <= j:
temp = str[j]
str[j] = str[i]
str[i] = temp
i = i+1
j = j-1
return str
def reverse3(str):
left = 0
right = len(str)-1
while left <=right :
str = str[:left] + str[right] + str[left+1:right] + str[left] + str[right+1:]
left = left +1
right = right -1
return str
def reverse4(str):
length = len(str)
if length < 2:
return str
else:
return reverse4(str[1:]) + str[0]
if __name__ == "__main__":
str = ''
str = raw_input("input str:")
print reverse4(str)