描述
在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
示例 1:
输入:s = “We are happy.”
输出:“We%20are%20happy.”
题解
方法一:循环法、非原地修改
/**
* @param {string} s
* @return {string}
*/
var replaceSpace = function(s) {
let res = "";
for (const c of s) {
res += c === ' ' ? '%20' : c;
}
return res
};
方法二:双指针,原地修改
/**
* @param {string} s
* @return {string}
*/
var replaceSpace = function(s) {
s = s.split(""); // 将字符串转为数组
let originalLength = s.length;
let spaceCount = 0;
for (let i = 0; i < originalLength; i++) {
if (s[i] === " ") {
spaceCount++;
}
}
// 因为一个空格要替换成三个字符,所以新数组长度=原数组长度 + 2 * 空格个数
s.length = s.length + spaceCount * 2;
// 倒序遍历修改
for (let i = originalLength - 1, j = s.length - 1; i < j; i--, j--) {
if (s[i] !== " ") {
s[j] = s[i];
} else {
s[j] = "0";
s[j - 1] = "2";
s[j - 2] = "%";
j -= 2;
}
}
return s.join("");
};
方法三:正则表达式
/**
* @param {string} s
* @return {string}
*/
var replaceSpace = function(s) {
s.replace(/\s/g, '%20')
};