Skip to main content

5 替换空格

牛客

描述

请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

示例1:

输入:"We Are Happy"

返回值:"We%20Are%20Happy"

数组解法:

如果定义一个 char 数组,从前面开始复制,那么后面很多 char 会被多次移动,时间复杂度 O(n2),如果从后面往前面复制则没有这个问题,时间复杂度 O(n)。可以先遍历一遍字符串,计算空格个数,也可以直接使用一个三倍长度的 char 数组,看需要节省时间还是空间。

import java.util.*;
public class Solution {
public String replaceSpace (String s) {
if(s==null) return null;
int count=countBlank(s);
if(count==0) return s;
char[] c=new char[s.length()+2*count];
int index=c.length-1;
for(int i=s.length()-1;i>=0;--i){
if(s.charAt(i)==' '){
c[index--]='0';
c[index--]='2';
c[index--]='%';
}else{
c[index--]=s.charAt(i);
}
}
return new String(c);
}
//计算空格个数
private int countBlank(String s){
int count=0;
for(int i=0;i<s.length();++i){
if(s.charAt(i)==' ')
++count;
}
return count;
}
}

java 语言也可以用现成的 StringBuilder 类,代码会简单一些,但是效率低一些

import java.util.*;


public class Solution {

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