《剑指offer》第二题(js)
题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
方法一、用正则表达式
function replaceSpace(str)
{
// write code here
var afterReplace = str.replace(/\s/g,"%20");
return afterReplace;
}
运行时间:14ms,占用内存:5428k
方法二
遍历字符串,通过indexOf(" “)查找空格位置,与字符位置比较。若不相等,则将该字符存入新字符串,若相等则用别的字符替换空格,且存入”%20"到新字符串。返回新字符串。
注意:字符串不能通过下标修改!
function replaceSpace(str)
{
// write code here
var strs = "",j = 0;
if (typeof(str) != 'string') return false;
for (var i=0;i<str.length;i++) {
if (str.indexOf(" ") === i) {
// 用0替换空格,保持字符串长度不变,正常遍历
// 且str.indexOf能得到下一空格的位置
str = str.substring(0,i) + "0" + str.substring(i+1);
strs += "%20";
}else {
strs += str.substring(i,i+1);
}
}
return strs;
}
运行时间:12ms,占用内存:5328k
方法三
思路和上面的差不多。将字符串用 split 方法转换为数组,并创建一个新数组。用for in循环每一项,判断是否为空格。若是,则在新数组中存入 “%20”,若不是,则将该项存入新数组。最后用 join 方法将新数组转换为字符串返回。
function replaceSpace(str){
// write code here
if (typeof(str) != 'string') return false;
var strs = str.split("");
var result = [];
for (var index in strs) { // 注意 index 是 key,不是 value
if (strs[index] === " ") {
result.push("%20");
}else {
result.push(strs[index]);
}
}
return result.join("");
}
运行时间:15ms,占用内存:5344k