【剑指offer】05. 替换空格

237 阅读1分钟

题目描述

---

//05. 替换空格
//请实现一个函数,把字符串 s 中的每个空格替换成"%20"。s

题解

// 遍历拼接法
// 遇到空格就加%20,空格左右重新拼接。
// 时间复杂度:5 ms , 在所有 Java 提交中击败了 5.50% 的用户
// 空间复杂度:38.1 MB , 在所有 Java 提交中击败了 5.00% 的用户
class Solution {
	public String replaceSpace(String s) {
        String ns = s;
        for (int i=0; i<=ns.length() - 1; i++) {
            if (ns.charAt(i) == ' ') {
                ns = ns.substring(0,i) + "%20" + ns.substring(i+1, ns.length());
            }
        }
        return ns;
	}
}

class Solution {
	public String replaceSpace(String s) {
        for (int i=0; i<=s.length() - 1; i++) {
            if (s.charAt(i) == ' ') {
                s = s.substring(0,i) + "%20" + s.substring(i+1, s.length());
            }
        }
        return s;
	}
}
// 一个个遍历,遇到空格加%20
// 时间复杂度O(N):0 ms , 在所有 Java 提交中击败了 100.00% 的用户
// 空间复杂度O(N):36 MB , 在所有 Java 提交中击败了 98.40% 的用户
class Solution {
	public String replaceSpace(String s) {
		StringBuilder sb = new StringBuilder();
		for (int i=0; i < s.length(); i++) {
			char c = s.charAt(i); // 遍历所有的字符
			if (c == " ") {  // 是空格就放%20
				sb.append("%20");
			}
			else {  // 不是空格就直接放
				sb.append(c);
			}
		}
		return sb.toString();
	}
}



// 调包法
// 时间复杂度:0 ms , 在所有 Java 提交中击败了 100.00%的用户
// 空间复杂度:36.3 MB , 在所有 Java 提交中击败了90.21% 的用户
class Solution {
	public String replaceSpace(String s) {
        return s.replace(" ", "%20");
	}
}



// 双指针法
// 时间复杂度:1 ms , 在所有 Java 提交中击败了 26.74% 的用户
// 空间复杂度:36.3 MB , 在所有 Java 提交中击败了 91.47%的用户
class Solution {
	public String replaceSpace(String s) {
        StringBuffer ns = new StringBuffer(s);
        int p1 = ns.length() - 1;
        for (int i = 0; i <= p1; i++) {
            if (ns.charAt(i) == ' ') {
                ns.append("  ");
            }
        }
        System.out.println(ns);
        int p2 = ns.length() - 1; // 新字符串的末位
        while (p1 >= 0 && p2 >= p1) {
            char c = ns.charAt(p1--);
            if (c == ' ') {
                ns.setCharAt(p2--, '0');
                ns.setCharAt(p2--, '2');
                ns.setCharAt(p2--, '%');
                System.out.println(ns);
            }
            else {
                ns.setCharAt(p2--, c);
                System.out.println(ns);
            }
        }
        System.out.println(ns);
        return ns.toString();
    }
}