Career-Cup-150 1.2

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)




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值