剑指offer(2)——替换空格

161 阅读2分钟

这是我参与8月更文挑战的第2天,活动详情查看:8月更文挑战

题目描述 请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

思路 1.正则表达式替换所有空格 2.开辟新的字符串用于替换所有空格 3.通过双指针替换 4.js字符串splice方法替换 手首先要明确两个问题: 问题1:替换字符串,是在原来的字符串上做替换,而不是新开辟一个字符串做替换! 问题2:在当前字符串替换,怎么替换才更有效率(不考虑java里现有的replace方法)。从前往后替换,后面的字符要不断往后移动,要多次移动,所以效率低下,从后往前,先计算需要多少空间,然后从后往前移动,则每个字符只为移动一次,这样效率更高一点。 填充后的形式:

1.正则表达式替换所有空格

// 1.正则
function replaceSpace(str)
{
    return str.replace(/\s/g, "%20");
}

2.开辟新的字符串用于替换所有空格

function find(str) {
    var res='';
    for(i=0; i<str.length; i++) {
        if(str[i] == ' ') {
            res = res+'%20'

        } else {
            res = res + str[i]
        }
    }
    console.log(res)
}
var res1 = 'we are happy';
find(res1)

3.通过双指针替换

function find(str) {
    if(str == '' || str.length == 0) {
        return 0
    }
    var emptyLen = 0;
    //空格数量 
    for(let i=0 ; i<str.length; i++ ) {
        if(str[i] == ' ') {
            ++emptyLen 
        }
    }
    var length = str.length + emptyLen*2;
    var chs = new Array(length);
    //两个指针一个指向原数组下标(j),一个指向新数组下标(i)
    for(let i = 0, j = 0; j<str.length; j++,i++) {
        if(str[j] == ' ') {
            chs[i++] = '%';
            chs[i++] = '2';
            chs[i++] = '0';
        } else {
            chs[i] = str[j];
        }
    }
    console.log(chs)
}
var res1 = 'we are happy';
find(res1)

4.js字符串splice方法替换

function find(str) {
    str = str.split("")
    console.log(str.length)
    //将字符串分割为字符串数组(splice是对数组进行操作的)
    for(var i=0; i<str.length; i++) {
        if(str[i] == ' ') {
          str.splice(i,1,'%20')
        }
    }
    // str = str.join('') 
    console.log(str)
}
var res1 = 'we are happy';
find(res1)

如有错误欢迎指出