首页 > 试题广场 >

左旋转字符串

[编程题]左旋转字符串
  • 热度指数:445930 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列  S ,请你把其循环左移 K 位后的序列输出。例如,字符序列 S = ”abcXYZdef” , 要求输出循环左移 3 位后的结果,即 “XYZdefabc”

数据范围:输入的字符串长度满足
进阶:空间复杂度 ,时间复杂度
示例1

输入

"abcXYZdef",3

输出

"XYZdefabc"
示例2

输入

"aab",10

输出

"aba"
无非就是注意,移动的位数比字符串位数还多的情况:
class Solution:
    def LeftRotateString(self, s, n):
        if not s:
            return ""
        return s[n%len(s):]+s[0:n%len(s)] 
以及为空的情况就行,一行解决。

发表于 2022-06-15 17:03:44 回复(0)
# -*- coding:utf-8 -*-
class Solution:
    def LeftRotateString(self, s, n):
        # write code here
        if n<0:
            return None
        a=s[:n]
        s=s+a 
        return s[n:]

发表于 2021-05-03 18:05:16 回复(0)
# -*- coding:utf-8 -*-
class Solution:
    def LeftRotateString(self, s, n):
        # write code here
        if s=="":
            return ""
        if n%len(s)==0:
            return s
#         n%len(s)实际表示循环移动相当于最开始移动了多少
        temp = s[n%len(s):]
        for i in range(n%len(s)):
            temp+=s[i]
        return temp
发表于 2021-04-23 21:16:11 回复(0)
Python字符串切片。
# -*- coding:utf-8 -*-
class Solution:
    def LeftRotateString(self, s, n):
        # write code here
        return s[n:]+s[:n]


发表于 2021-04-17 21:17:35 回复(0)
# -*- coding:utf-8 -*-
class Solution:
    def LeftRotateString(self, s, n):
        # write code here
        ls=''
        if n==0:
            ls=''
            for i in range(n,len(s)):
                ls+=s[i]
        elif 0<n<=len(s):
            for i in range(n,len(s)):
                ls+=s[i]
            for j in range(n):
                ls+=s[j]
        else:
            ls=s
        return ls
发表于 2021-04-01 22:10:54 回复(0)

python解法:

'''
解法1:截取想要的字符串再拼接;
'''
class Solution:
    def LeftRotateString(self, s, n):
        return s[n:] + s[0:n]
编辑于 2021-02-19 14:01:13 回复(0)
# -*- coding:utf-8 -*-
class Solution:
    def LeftRotateString(self, s, n):
        # write code here
        return s[n:]+s[:n]

发表于 2020-10-16 16:06:04 回复(0)
# -*- coding:utf-8 -*-
class Solution:
    def LeftRotateString(self, s, n):
        # write code here
        if len(s) == 0:
            return ''
        else:
            n = n % len(s)
            return s[n:]+s[:n]
牛客的系统就很离谱,下面这行代码随便过:
# -*- coding:utf-8 -*-
class Solution:
    def LeftRotateString(self, s, n):
        # write code here
        return s[n%100:]+s[:n%100]


编辑于 2020-10-13 01:19:38 回复(0)
python 一行:
# -*- coding:utf-8 -*-
class Solution:
    def LeftRotateString(self, s, n):
        # write code here
        return s[n % len(s):]  + s[:n % len(s)] if s else s

发表于 2020-10-01 20:59:30 回复(0)
# -*- coding:utf-8 -*-
class Solution:
    def LeftRotateString(self, s, n):
        # write code here
        return s[n:]+s[:n]
字符串拼接。
发表于 2020-07-26 19:29:59 回复(0)
class Solution:
    def LeftRotateString(self, s, n):
        if s == '':
            return s
        else:
            return s[n%len(s):len(s)] + s[0:n%len(s)]


发表于 2020-07-09 20:52:09 回复(0)
# -*- coding:utf-8 -*-
class Solution:
    def LeftRotateString(self, s, n):
        # write code here
        if n > len(s) and s:
            n = n % len(s)
        return s[n:] + s[:n]

发表于 2020-06-17 22:21:39 回复(0)
# -*- coding:utf-8 -*-
class Solution:
    def LeftRotateString(self, s, n):
        # write code here
        if s == '':
            return ""
        else:
            if n == len(s):
                return s
            elif n < len(s):
                count = 0
                while count < n:
                    news = ''.join(s[0])
                    slist  = list(s)
                    slist.pop(0)
                    s = ''.join(slist)
                    s = s +news
                    count += 1
            else:
                count = 0
                while count < n%len(s):
                    news = ''.join(s[0])
                    slist  = list(s)
                    slist.pop(0)
                    s = ''.join(slist)
                    s = s +news
                    count += 1
            return s
发表于 2020-06-17 17:51:12 回复(0)
# -*- coding:utf-8 -*-
class Solution:
    def LeftRotateString(self, s, n):
        # write code here
        if not s:
            return ""
        l = len(s)
        if n%len(s) == 0:
            return s
        else:
            n = n%len(s)
            i = 0
            while i < n:
                s = list(s)
                s.append(s[0])
                del s[0]
                i = i+1
            s=''.join(s)
            return s
发表于 2020-05-29 17:38:39 回复(0)
# -*- coding:utf-8 -*-
class Solution:
    def LeftRotateString(self, s, n):
        if len(s)<=1:
            return s
        k=int(n%len(s))
        ss=''
        for i in range(len(s)-k):
            ss=ss+s[i+k]
        for i in range(k):
            ss=ss+s[i]
        return ss
        # write code here

发表于 2020-05-27 15:57:41 回复(0)
        m=len(s)
        if m==0:
            return("")
        else:
            k=n%m
            return(s[k:]+s[:k])

发表于 2020-05-22 14:59:37 回复(0)
# -*- coding:utf-8 -*-
class Solution:
    def LeftRotateString(self, s, n):
        if s == "":
            return ""
        if n == 0:
            return s
        ch = list(s)
        res = ch[:n]
        remain_str = ch[n:]
        result = "".join(remain_str)+"".join(res)
        return result
发表于 2020-04-16 07:18:53 回复(0)
# -*- coding:utf-8 -*-
"""
two pointer
"""
class Solution:
    def LeftRotateString(self, s, n):
        if not s:
            return ""
        if n <= 0:
            return s 
        s = list(s)
        s_len = len(s)
        if n < s_len:
            # 整个翻转
            self._reverse(s, 0, s_len - 1)
            # 后半部份转回来
            self._reverse(s, 0, s_len - n - 1)
            # 前半部分赚回来
            self._reverse(s, s_len - n, s_len - 1)
        return "".join(s)

    def _reverse(self, s, p1, p2):
        while p1 < p2:
            s[p1], s[p2] = s[p2], s[p1]
            p1 += 1
            p2 -= 1


s = Solution()
ans = s.LeftRotateString(" ", 3)
print(ans)

编辑于 2020-03-03 15:43:22 回复(0)