题目

leetcode:剑指offer5

题解与分析

字符串替换,想到的第一个办法就是调库,strings.Replace,但这道题显然不能这样

方法一

然后我想到一个办法是按空格分割,然后用”%20″链接

func replaceSpace(s string) string {
    sp := strings.Split(s, " ")
    ret := strings.Join(sp, "%20")
    return ret
}

方法二

除了第一个办法,还有一个办法,不过go语言不支持,在go语言里字符串是不可变类型,,不过这个思路是很好的思路

在原来字符串基础上,根据空格多少,增加2倍空格的空间,再采用双指针方法从后往前遍历,在新增加的空间上的指针命名为i,指向原字符数组末尾的指针命名为j,

  • 如果s[j]!=’ ‘ ,那么s[i] = s[j],i--使i继续往前走
  • 如果s[j] == ' ',那么
    s[i] = '0'
    s[i-1] = '2'
    s[i-2] = '%'
    i = i - 3

func replaceSpace(ss string) string {
    s := []byte(ss)
    length := len(s)
    // 判断空格个数
    cout := 0
    for i:=0; i<length;i++{
        if s[i]==' '{
            cout += 1
        }
    }
    // 新增加空间
    tmp := make([]byte, cout*2)
    // 给原来的字符数组扩容
    s = append(s, tmp...)

    nelngth := len(s)
    fmt.Println(nelngth)
    i := nelngth-1
    for j:=length-1;j>=0;j--{
        // 如果是空格
        if s[j]==' '{
            // s[i] = '0'
            // i--
            // s[i] = '2'
            // i--
            // s[i] = '%'
            // i--
            s[i] = '0'
            s[i-1] = '2'
            s[i-2] = '%'
            i = i-3
        }else{
            s[i] = s[j]
            i--
        }
    }
    return string(s)
}
分类: 算法

站点统计

  • 文章总数:315 篇
  • 分类总数:20 个
  • 标签总数:193 个
  • 运行天数:1127 天
  • 访问总数:12036 人次

浙公网安备33011302000604

辽ICP备20003309号