剑指offer第二题。
题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
解题思路
由于java
给的参数是StringBuilder
,这在一定程度上给我们一定的提示,我们利用StringBuilder
的charAt(i)
和setCharAt(i,xxx)
这两个函数可以轻易实现获取索引处元素以及对这个索引处元素进行赋值。
由于是将空格替换成%20
,空格本身就算一个地方,所以我需要将原来的字符串进行扩充。扩充的长度也非常好算,就是原来的长度+空格个数*2即可。然后遍历原字符串,不是空格的就一个个搬到新长度对应的位置上,否则就塞入%20
三个字符。
我的答案
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| public class Solution { public String replaceSpace(StringBuffer str) { int count = 0; for(int i=0;i<str.length();i++){ if(str.charAt(i) == ' '){ count++; } } int oldLength = str.length(); int oldIndex = oldLength - 1; int newLength = oldLength + 2*count; int newIndex = newLength - 1; str.setLength(newLength); for(;oldIndex >= 0 && oldIndex < newIndex;oldIndex--){ if(str.charAt(oldIndex) == ' '){ str.setCharAt(newIndex--,'0'); str.setCharAt(newIndex--,'2'); str.setCharAt(newIndex--,'%'); }else{ str.setCharAt(newIndex--,str.charAt(oldIndex)); } } return str.toString(); } }
|