码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode-面试题13

时间:2020-03-17 00:03:21      阅读:85      评论:0      收藏:0      [点我收藏+]

标签:leetcode   ==   build   curl   itoa   bsp   end   实战   return   

额,这题很明显就可用双指针,感觉没考察点啊,今天主要在实战pprof,可总结的不多,不想写别的了,多po俩实现

 

一次迭代string累加,时间很慢,原因是string。

func compressString(s string) string {
    if len(s) == 0 {
        return s
    }
    ans := ""
    ch := s[0]
    cnt := 1
    for i := 1; i < len(s); i++ {
        if ch == s[i] {
            cnt++
        } else {
            ans += string(ch) + strconv.Itoa(cnt)
            cnt = 1
            ch = s[i]
        }
    }
    ans += string(ch) + strconv.Itoa(cnt)
    if len(ans) >= len(s) {
        return s
    }
    return ans
}

 

其实我对go的一些小细节还不太熟悉

func method2(s string) string {
    if s == "" {
        return ""
    }
    var stringBuilder strings.Builder
    curr := s[0]
    curLen := 1

    for i := 0; i < len(s); i++ {
        if s[i] == curr {
            curLen++
        } else {
            stringBuilder.WriteByte(curr)
            stringBuilder.WriteString(strconv.Itoa(curLen))
            curr = s[i]
            curLen = 1
        }
    }
    stringBuilder.WriteByte(curr)
    stringBuilder.WriteString(strconv.Itoa(curLen))

    if stringBuilder.Len() >= len(s) {
        return s
    }
    return stringBuilder.String()
}

 

最后,正常人的思路,双指针

func compressString1(S string) string {
    if len(S) <= 1 {
        return S
    }
    res := ""
    slow, quick := 0, 0
    for quick < len(S) {
        if S[quick] != S[slow] {
            res += string(S[slow]) + strconv.Itoa(quick-slow)
            slow = quick
        }
        quick++
    }
    
    res += string(S[slow]) + strconv.Itoa(quick-slow)

    if len(res) >= len(S) {
        return S
    }
    return res
}

 

end

 

leetcode-面试题13

标签:leetcode   ==   build   curl   itoa   bsp   end   实战   return   

原文地址:https://www.cnblogs.com/CherryTab/p/12507717.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!