高频算法面试题_旋转字符串(完整的代码实现)

这篇博客主要介绍了如何解决高频面试题——旋转字符串,包括暴力位移的方法和利用数学知识的反转法,并给出了GO语言的代码实现。同时,还列举了相关变种题如链表反转、尾部字符串移动到头部和单词反转等。
摘要由CSDN通过智能技术生成

题目描述

1.    给定一个字符串,要求把字符串前面的若干个字符移动到字符串的尾部,如把字符串“abcdef”前面的2个字符’a’和’b’移动到字符串的尾部,使得原字符串变成字符串“cdefab”。请写一个函数完成此功能,要求对长度为n的字符串操作的时间复杂度为 O(n),空间复杂度为 O(1)。

分析与解法

方案一:暴力位移(时间复杂度不符合要求)
思路
    逻辑思路:
        1. 把需要移动的字符一个一个的移动到字符串的尾部
    代码实现思路:
        1. 实现一个函数,可以完成移动一个字符到字符串尾部的功能
      2. 循环m次调用上述函数,完成移动m个字符到字符串尾部
代码实现(GO语言)
package main

func LeftShiftOne(chars []byte,n int)  {
    c:=chars[0] // 获取第一个字符
    for i:=1;i<n;i++{
        chars[i-1]=chars[i]
    }
    chars[n-1]=c
}

func LeftRotateString(s string,m int) string {
    chars:=[]byte(s)
    n:=len(chars)
    for m>0{
        LeftShiftOne(chars,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值