zoukankan      html  css  js  c++  java
  • 算法试题

    题目

    题目:汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。
    对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后
    的结果,即“XYZdefabc”。是不是很简单?OK,搞定它

    解析

    思路一

    切片 + 拼接

    思路二

    对原字符串进行扩充两倍,在这个基础上直接从要反转的地方取就可以,相当于前n个字符串翻转了,思想非常好

    思路三

    首先需要写一个reverse函数,把任何输入的字符串完全翻转。然后根据题目中给出的左旋转字符串的个数n,
    用全字符串长度length减去旋转字符串个数n,求得对于新的字符串应该在哪一位进行旋转,然后分别旋转前[:length-n]子
    串和[length-n:]子串,重新拼接两个子串即可。
    举例: n=2
    1 2 3 4 5
    5 4 3 2 1 整体反转
    3 4 5 1 2 对于5-2=3部分翻转,对于最后2 1再部分翻转

    答案

    '''
    思路一:
    
    29ms
    5760k
    '''
    
    # -*- coding:utf-8 -*-
    class Solution:
        def LeftRotateString(self, s, n):
            # write code here
            return s[n:] + s[:n]
    
    '''
    思路二:对原字符串进行扩充两倍,在这个基础上直接从要反转的地方取就可以,相当于前n个字符串翻转了,思想非常好
    
    28ms
    5760k
    '''
    
    # -*- coding:utf-8 -*-
    class Solution:
        def LeftRotateString(self, s, n):
            # write code here
            if not s:
                return ''
            length = len(s)
            s += s
            return s[n:length + n]
    
    '''
    尽量避免使用内置函数
    思路三:首先需要写一个reverse函数,把任何输入的字符串完全翻转。然后根据题目中给出的左旋转字符串的个数n,
    用全字符串长度length减去旋转字符串个数n,求得对于新的字符串应该在哪一位进行旋转,然后分别旋转前[:length-n]子
    串和[length-n:]子串,重新拼接两个子串即可。
    举例:  n=2
           1 2 3 4 5
           5 4 3 2 1   整体反转
           3 4 5 1 2   对于5-2=3部分翻转,对于最后2 1再部分翻转
    
    28ms
    5760k
    '''
    
    # -*- coding:utf-8 -*-
    class Solution:
        def LeftRotateString(self, s, n):
            # write code here
            if not s or len(s) < n or n < 0:
                return ''
            s = list(s)
            length = len(s)
            s = self.Reverse(s)
            s1 = self.Reverse(s[:length - n])
            s2 = self.Reverse(s[length - n:])
            result = ''.join(s1) + ''.join(s2)
            return result
    
        def Reverse(self, s):
            start = 0
            end = len(s) - 1
            while start < end:
                s[start], s[end] = s[end], s[start]
                start += 1
                end -= 1
            return s

    自我实现答案

    s = "shdkfhkxm"
    
    
    def func(s, k):
        return s[k:] + s[:k]
    
    
    print(func(s, 3))  # kfhkxmshd
  • 相关阅读:
    世界城堡论坛
    瑞典皇家理工学院工程实例:An Advanced Speech Codec for a Voice over IP Transmission System
    压缩域丢包补偿:Demo of Compressed Domain Packet Loss Concealment of Sinusoidally Coded Speech
    音频编解码器五大模块之:T
    瑞典皇家理工学院工程实例:Acoustic measurement system
    VOIP Codec 三剑客之 ISAC/ILBC ISAC (5) LPC Parameter Encode 模块
    通信语音音质评估:
    Frank Klemm's Musepack Page
    瑞典皇家理工学院工程实例:Sound localization
    Frank Klemm's Dither and Noise Shaping Page: Dither and Noise Shaping In MPC/MP+
  • 原文地址:https://www.cnblogs.com/shijieli/p/10802681.html
Copyright © 2011-2022 走看看