字符串反转

Super橙子 · · 2109 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

字符串反转

问题描述:给定一个字符串,将若干个字符移动到该字符串尾部
例:1234abc将前四个字符移动到尾部,输出abc1234

思路

  • 蛮力法,移动
    • 时间复杂度高
  • 分部拷贝,交换
    • 空间复杂度高
  • 三步翻转
    • 时间复杂度O(n)
    • 空间复杂度O(1)

golang代码如下:(三步反转)

//三步翻转
func stringRevote(start, end int, str []byte) {

    if start < 0 || end > len(str)-1 {
        log.Fatal("起始位置或终止位置错误")
    }
    //golang中切片是传址
    for start < end {
        //第一个跟最后一个换
        str[start], str[end] = str[end], str[start]
        //起始点向后移动
        start++
        //终止点向前移动
        end--
    }
}

func main() {
    var s []byte
    var end int
    fmt.Println("请输入字符串:")
    fmt.Scanf("%s", &s)

    fmt.Println("请输入移动几个字符:")
    fmt.Scanf("%d", &end)

    stringRevote(0, end-1, s)
    fmt.Printf("%s\n", s)

    stringRevote(end, len(s)-1, s)
    fmt.Printf("%s\n", s)

    stringRevote(0, len(s)-1, s)
    fmt.Printf("%s\n", s)

}

分部拷贝,交换

func stringRotation(s string, index int) string {
    if index > len(s) {
        return "error:index超出长度"
    }
    sb := []byte(s)
    //截取两部分,temp暂存前半部分,即将旋转到后半部分位置
    temp := sb[:index]
    //sb切割掉前半部分,重新赋值为后半部分
    sb = sb[index:]
    //将前半部分的值,正序追加到sb尾部
    for i := 0; i < index; i++ {
        sb = append(sb, temp[i])
    }
    return string(sb)

}


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:Super橙子

查看原文:字符串反转

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2109 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传