时间复杂度O(N)解法:java
使用两个指针的方法:api
public class Solution { public String replaceSpace(StringBuffer str) { char[] chas = str.toString().toCharArray(); int blankNum = 0; //空格的个数 for(int i = 0;i < chas.length;i++){ //遍历数组获得空格个数 if(chas[i] == ' '){ blankNum++; } } int newLen = chas.length + blankNum * 2; //新数组的长度 char[] newChas = new char[newLen]; for(int i = 0,j = 0;j < chas.length;i++,j++){ newChas[i] = chas[j]; } int p1 = chas.length - 1; //指向原来数组的尾部 int p2 = newChas.length - 1; //指向新数组的尾部 while(p1 >= 0 && p2 >= p1){ if(newChas[p1] == ' '){ newChas[p2--] = '0'; newChas[p2--] = '2'; newChas[p2--] = '%'; }else{ newChas[p2--] = newChas[p1]; } p1--; } return new String(newChas); } }
使用java api的方法:数组
public class Solution { public String replaceSpace(StringBuffer str) {char[] chas= str.toString().toCharArray(); StringBuffer sb = new StringBuffer(); //建立一个新的字符串 for(int i = 0;i < chas.length;i++){ //遍历数组,当遇到空格的时候添加%20,不然添加当前字符 if(chas[i]==' '){ sb.append("%20"); }else{ sb.append(chas[i]); } } return sb.toString(); } }
java api一行解法:app
public class Solution { public String replaceSpace(StringBuffer str) { return str.toString().replaceAll(" ","%20"); } }