保留单词原型的字符串翻转

输入:"I am a student!"
输出:"student a am I"

先定义一个翻转字符串函数。

def reverse_string(s, start, end):
    while start < end:
        tmp = s[start]
        s[start] = s[end]
        s[end] = tmp
        start += 1
        end -= 1
    return s

解决思路是对每个单词先进行翻转,然后对整个字符串进行翻转。

Step1:  I am a student!
Step2:  I ma a student!
Step3:  I ma a student!
Step4:  I ma a !tneduts
Step5:  student! a am I

具体解决方案如下。

def solution(s):
    s = list(s)
    start_tag = 0
    for i in range(s.__len__()):
        if s[i] == ' ':
            s = reverse_string(s, start_tag, i - 1)
            start_tag = i + 1
    if not start_tag == s.__len__():
        s = reverse_string(s, start_tag, s.__len__() - 1)
    s = reverse_string(s, 0, s.__len__() - 1)
    return ''.join(s)

时间复杂度分析:
设字符串长度为n,单词数量为m,单词平均长度为l,遍历字符串为T=O(n),翻转字符串次数为T=O(m),翻转单词的时间复杂度为T=O(l),在最坏情况下每个字母为一个单词,则算法时间复杂度为T=O(n^2)。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 35,143评论 18 399
  • 一年级语文上册生字表 生字表一(共400字) 啊(ā)爱(ài)安(ān)岸(àn)爸(bà)八(bā)巴(bā)...
    meychang阅读 3,264评论 0 6
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,751评论 0 4
  • 青石巷—据此填词 青石巷中撑着画纸伞的姑娘 羁绊了谁的悠悠过往 停不下的远方,凝滞的沧桑 都在时光中坦荡 月光下的...
    HuhuanYu阅读 1,720评论 1 8
  • - (NSDictionary*)getCuttentDayPeriod {NSDate*date = [NSDa...
    流沙3333阅读 2,046评论 0 0

友情链接更多精彩内容