剑指OFFER----5、替换空格(js实现)

题目

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


思想

  1. 剑指OFFER 双指针替换法(感觉对JS来说并不方便,因为string是基本数据类型)
  2. 逐位判断插入到新字符串变量
  3. 正则替换
  4. 原生实现replaceAll方法
// 剑指OFFER版本
function replaceSpace(str) {
        // write code here
        if (!str) {
            return ''
        }
        let spaceCount = 0
        let letterArr = []
        for (let i = 0; i < str.length; i++) {
            if (str[i] === ' ') {
                spaceCount++
            }
            letterArr.push(str[i])
        }
        let i = letterArr.length - 1
        letterArr.length = letterArr.length + 2 * spaceCount
        let j = letterArr.length - 1
        while (i < j) {
            if (letterArr[i] === ' ') {
                letterArr[j--] = '0'
                letterArr[j--] = '2'
                letterArr[j--] = '%'
                i--
            } else {
                letterArr[j] = letterArr[i]
                j--
                i--
            }
            console.log(letterArr)
        }
        return letterArr.join('')
    }
// 逐位判断
function replaceSpace(str)
{
    // write code here
    if (!str) {
        return ''
    }
    let newStr = ''
    for (let i = 0; i < str.length; i++) {
        if (str[i] === ' ') {
            newStr += '%20'
        } else {
            newStr += str[i]
        }
    }
    return newStr
}
function replaceSpace(str) {
  return str.replace(/\s/g, '%20');
}
function replaceSpace(str)
{
    // write code here
    return replaceAll(str, ' ', '%20')
}

function subString (str, i, j) {
    let result = ''
    for (i; i < j; i++) {
        result += str[i]
    }
    return result
}

function replaceAll(str, before, after) {
    if (before.length > str.length) {
        return str
    }
    let searchLength = before.length
    let result = ''
    for (let i = 0; i < str.length; i++) {
        // 匹配到第一个字符
        if (str[i] === before[0]) {
            // 看before长度是否长于剩下的长度
            if (i > str.length - before.length) {
                break
                // 足够长
            } else {
                let compareStr = subString(str, i, i + searchLength)
                if (compareStr === before) {
                    let front = subString(str, 0, i)
                    let end = subString(str, i + searchLength, str.length)
                    str = front + after + end
                }
            }
        }
    }
    return str
}

你可能感兴趣的:(算法,剑指OFFER,剑指OFFER(JS版))