题目:
请实现一个函数,把字符串中的每个空格替换成"%20"。例如输入“We are happy.”,则输出“We%20are%20happy.”。
思路:
如果按照顺序从前往后依次查找字符串中空格然后替换,这样的话可以实现,但是由于每次替换空格后面的字符都要往后移动n,时间复杂度为O(n),现在题目要求在原字符串上面进行修改,那么我们可以考虑用StringBuffer,因为java中StringBuffer可以修改,而String不可以。我们从后往前依次遍历字符串,将原来的字符串拷贝到新的位置,遇到空格时用%20替换。新字符串的长度等于原字符串长度加上空格数*2
代码:
public String replaceEmpty(StringBuffer str) { //字符串为空 if(str==null) { System.out.println("输入错误"); return null; } //获取字符串长度 int length=str.length(); int indexOld=str.length()-1; //查找空格数量,并对字符串长度进行修改 for(int i=0;i<str.length();i++) { if(str.charAt(i)==' ') { length+=2; } } str.setLength(length); int indexNew=length-1; //开始拷贝字符串,从后往前拷贝,遇到空格则用%20替换 while(indexNew>indexOld) { if(str.charAt(indexOld)!=' ') { str.setCharAt(indexNew--,str.charAt(indexOld)); }else { str.setCharAt(indexNew--, '0'); str.setCharAt(indexNew--, '2'); str.setCharAt(indexNew--, '%'); } indexOld--; } return str.toString(); }