题目描述
---
//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();
}
}