美文网首页
第一章 字符串

第一章 字符串

作者: Yanpeton | 来源:发表于2016-11-14 17:35 被阅读22次

1.1字符串的旋转给定一个字符串,要求将字符串前面的若干个字符移到字符串的尾部。例如,将字符串‘abcdef’的前3个字符'a','b','c'移到字符串的尾部,那么原来的字符串将变成'defabc',请写一个函数实现该功能。

分析与解法

由于在python中字符串是不可变对象,这里就用python中的列表代替之,例如题目中的‘abcdef’对应['a', 'b', 'c', 'd', 'e', 'f'],python中s='abcdef',list(s)=['a', 'b', 'c', 'd', 'e', 'f']

解法一:蛮力移位
  • 首先将左边的一个字符移到字符串的最后位置,可实现left_shift_one(s);

  • 然后调用m次left_shift_one函数,使得字符串开头的m个字符移到字符串的尾部;
    def left_shift_one(s):
    n = len(s)
    key = s[0]
    for i in range(1, n):
    s[i-1] = s[i]
    s[n-1] = key

      def left_rotate_string(s, m):
          while(m>0):
              left_shift_one(s)
              m -= 1
    

    时间复杂度为O(m*n),空间复杂度O(1)

解法二:三步翻转
  • 先将一个字符串分割成两个部分,然后将这两个部分的字符串分别反转,最后再对整个字符串进行整体反转
    def reverse_string(s, f, t):
    while f < t:
    s[fr],s[t] = s[t],s[f]
    f += 1
    t -= 1
    def left_rotate_string(s, m):
    n = len(s)
    m %= n
    reverse_string(s,0,m-1)
    reverse_string(s,m,n-1)
    reverse_string(s,0,n-1)

举一反三

单词翻转

输入一个英文句子,翻转句子中单词的顺序。要求单词内字符的顺序不变,句子中单词以空格符隔开。为简单起见,标点符号与普通字母一样处理。例如,若输入“I am a student.",则输出"student. a am I"。

def reverse_sentence(s):
    s = s.split()
    f = 0
    t = len(s)-1
    reverse_string(s,f,t)    # 调用上面的reverse_string函数
    return s

相关文章

网友评论

      本文标题:第一章 字符串

      本文链接:https://www.haomeiwen.com/subject/pnihpttx.html