剑指offer5 替换空格
首先这个肯定不能用String类自带方法做。String.replace。
先行为艺术一下吧:
public class Solution { public String replaceSpace(StringBuffer str) { return str.toString().replace(" ","%20"); } }

这个题java给的是StringBuffer,那先用StringBuffer的API做吧,熟悉一下。(StringBuffer可以当成StringBuilder用,只是多了线程安全)。
public class Solution { public String replaceSpace(StringBuffer str) { StringBuffer sb = new StringBuffer(); for(char c:str.toString().toCharArray()){ if(c==' ') sb.append("%20"); else sb.append(c); } return sb.toString(); } }

倒着插入试试看,
public class Solution { public String replaceSpace(StringBuffer str) { /*int space_num = 0; for(char c:str.toString().toCharArray()){ if(c==' ') space_num++; }*/ StringBuffer sb = new StringBuffer(); char[] str_arr = str.toString().toCharArray(); for(int i=str_arr.length-1;i>=0;i--){ if(str_arr[i]==' ') sb.insert(0,"%20"); else sb.insert(0,str_arr[i]); } return sb.toString(); } }

看来insert效率还是不如append高的。查了下,因为java底层的StringBuilder和StringBuffer其实就是一个可以扩容的char数组。
下面用char数组做一下。
好麻烦,毕竟不是char数组输入,所以就先这样吧,这题不用太当真。
记住如果用数组,可以倒着插入。
# -*- coding:utf-8 -*- class Solution: # s 源字符串 def replaceSpace(self, s): # write code here # return s.replace(" ","%20") 26ms 5700k #arr = list(s) 25ms 5752k #for i in range(len(arr)): # if arr[i]==" ": # arr[i]="%20" #return "".join(arr) # 23ms 5676k ans = "" for c in s: if c==" ": ans+="%20" else: ans+=c return ans
看来直接操作还挺快

浙公网安备 33010602011771号