Lcof05

Lcof 05.替换空格

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

示例 1:

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

class Solution {
public String replaceSpace(String s) {
StringBuffer stringbuffer = new StringBuffer();
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == ' ') {
stringbuffer.append("%20");
} else {
stringbuffer.append(s.charAt(i));
}
}
return stringbuffer.toString();
}
}

优化:

1)p1指针指向初始字符串末尾位置;

2)遍历字符串,当遍历到空格时,在尾部填充两个任意字符,使得字符串长度等于替换后的长度;

3)p2指针指向现在遍历填充后的字符串末尾位置;

4)p1,p2指针从后向前遍历,当p1指向空格时,p2指向的位置依次填充’0’ ‘2’ ‘%’,否则就直接填充p1指向的字符值;

5)当p2遇到p1或者遍历结束,退出循环;

class Solution {
public String replaceSpace(String s) {
StringBuffer stringbuffer = new StringBuffer(s);
int p1 = stringbuffer.length() - 1;
for (int i = 0; i <= p1; i++) {
if (stringbuffer.charAt(i) == ' ') {
// 在字符串尾部添加两个空格
stringbuffer.append(" ");
}
}
int p2 = stringbuffer.length() - 1;
while (p1 >= 0 && p1 < p2) {
char tmp = stringbuffer.charAt(p1--);
if (tmp != ' ') {
stringbuffer.setCharAt(p2--, tmp);
} else {
stringbuffer.setCharAt(p2--, '0');
stringbuffer.setCharAt(p2--, '2');
stringbuffer.setCharAt(p2--, '%');
}
}
return stringbuffer.toString();
}
}
Author: Jiayi Yang
Link: https://jiayiy.github.io/2020/05/27/Lcof05/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.