描述

在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

示例 1:

输入:s = “We are happy.”
输出:“We%20are%20happy.”


题解

方法一:循环法、非原地修改

  1. /**
  2. * @param {string} s
  3. * @return {string}
  4. */
  5. var replaceSpace = function(s) {
  6. let res = "";
  7. for (const c of s) {
  8. res += c === ' ' ? '%20' : c;
  9. }
  10. return res
  11. };

方法二:双指针,原地修改

  1. /**
  2. * @param {string} s
  3. * @return {string}
  4. */
  5. var replaceSpace = function(s) {
  6. s = s.split(""); // 将字符串转为数组
  7. let originalLength = s.length;
  8. let spaceCount = 0;
  9. for (let i = 0; i < originalLength; i++) {
  10. if (s[i] === " ") {
  11. spaceCount++;
  12. }
  13. }
  14. // 因为一个空格要替换成三个字符,所以新数组长度=原数组长度 + 2 * 空格个数
  15. s.length = s.length + spaceCount * 2;
  16. // 倒序遍历修改
  17. for (let i = originalLength - 1, j = s.length - 1; i < j; i--, j--) {
  18. if (s[i] !== " ") {
  19. s[j] = s[i];
  20. } else {
  21. s[j] = "0";
  22. s[j - 1] = "2";
  23. s[j - 2] = "%";
  24. j -= 2;
  25. }
  26. }
  27. return s.join("");
  28. };

方法三:正则表达式

/**
 * @param {string} s
 * @return {string}
 */
var replaceSpace = function(s) {
    s.replace(/\s/g, '%20')
};