剑指offer--空格替换
2016-06-19 17:09
197 查看
空格替换
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
问题1:将空格替换成字符串,字符串将边长。若要是在原来的字符串上做替换,则保证字符串后面有足够的剩余空间。
问题2:若从头到尾的方向去替换,则每遇到一个空格,这个空格后面所有的字符都得向后移动两位,有的字符会被多次移动。
解决方案:
(1)从前向后遍历,得出空格数和字符数,计算出插入%20后的总长度。
(2)从后往前插入,在遇到空格前,先将字符向后移动。
这样字符串中的每个字符都只移动一次。
代码实现
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
问题1:将空格替换成字符串,字符串将边长。若要是在原来的字符串上做替换,则保证字符串后面有足够的剩余空间。
问题2:若从头到尾的方向去替换,则每遇到一个空格,这个空格后面所有的字符都得向后移动两位,有的字符会被多次移动。
解决方案:
(1)从前向后遍历,得出空格数和字符数,计算出插入%20后的总长度。
(2)从后往前插入,在遇到空格前,先将字符向后移动。
这样字符串中的每个字符都只移动一次。
代码实现
<pre name="code" class="java">public class ReplaceBlank { public String replaceSpace(StringBuffer str) { if (str.length() <= 0) return ""; int numOfBlank = 0; for (int i = 0; i < str.length(); i++)//统计空格 从前往后遍历 { if(str.charAt(i) == ' ') ++ numOfBlank; } if(numOfBlank == 0) //无空格的情况 return str.toString(); int newLength = str.length() + numOfBlank * 2;//新长度 int newIndex = newLength - 1; int oldIndex = str.length() - 1; str.setLength(newIndex + 1); while(oldIndex >= 0 && newIndex > oldIndex)//从后往前替换 { if (str.charAt(oldIndex) == ' ')//当遇到空格时,把%20插入并且oldIndex减一 { str.setCharAt(newIndex--,'0'); str.setCharAt(newIndex--,'2'); str.setCharAt(newIndex--,'%'); } else //当无空格时将字符内容进行移动 { str.setCharAt(newIndex--,str.charAt(oldIndex)); } -- oldIndex; } return str.toString(); } }
相关文章推荐
- 替换空格
- 将字符串中的空格用 代替
- 字符串替换空格
- 替换空格
- 替换空格
- 字符串替换--替换字符串中的空格为$$$。要求时间复杂度为O(N)
- day06使用两个栈实现一个队列+使用两个队列实现一个栈+字符串空格替换
- 【C/C++】将字符串中间的空格替换为"%20"
- "\u00A0"空格替换
- 替换空格
- 使用两个栈实现一个队列/使用两个队列实现一个栈/空格替换
- 【程序员面试金典】空格替换
- 替换空格
- 剑指offer面试题[4]-空格替换
- 替换空格
- 2 剑指offer——字符串
- 剑指Offer——字符串空格替换
- 每天一道算法题——替换空格
- 剑指offer之空格替换java
- sed替换文件中的空格或tab键为指定的单分隔符