题目

剑指offer:58 字符串左旋

分析与代码

诚实的来说,在不用额外空间的情况下,我一开始并没有想到好的办法,
看了题解,才意识到

  • 先翻转前n个子串
  • 翻转后n个子串
  • 翻转整串

func reverseLeftWords(ss string, n int) string {
    // 不可以申请额外空间
    s := []byte(ss)
    if len(s)==0{
        return ""
    }
    if n>len(s){
        return ss
    }
    // 反转前n子串
    left, right := 0, n -1 
    reverse(&s, left, right)
    // 反转n到最后子串
    left, right = n, len(s)-1
    reverse(&s, left, right)

    // 反转整个字符串
    left, right = 0, len(s)-1
    reverse(&s, left, right)
    return string(s)
}
func reverse(s *[]byte, left, right int){
    for left<=right{
        (*s)[left], (*s)[right] = (*s)[right], (*s)[left]
        left++
        right--
    }
}
分类: 算法

站点统计

  • 文章总数:309 篇
  • 分类总数:19 个
  • 标签总数:191 个
  • 运行天数:1009 天
  • 访问总数:129584 人次

浙公网安备33011302000604

辽ICP备20003309号