算法题目--替换空格
2017-06-23 22:34
197 查看
题目内容:
此题有三种做法:
(1)使用java的replace方法
(2)使用一个额外的字符串做辅助
(3)在原字符串上修改
这三种做法的难度依次上升。
我主要来分析一下第三种做法,也是O(n)的一个做法。
第三种方法的思路:
先遍历一遍字符串,这样就能统计出字符串中空格的总数,并可以由此计算出替换之后的字符串长度。
每替换一个空格,长度增加2,因此替换以后字符串的长度等于原来的长度加上2*空格的数目。
我们从字符串的后面开始复制和替换,首先准备两个指针,P1和P2,P1指向原始字符串的末尾,P2指向替换之后字符串的末尾。
接下来,向前移动指针P1,逐个把它指向的字符复制到P2指向的位置,直到碰到第一个空格。
三种方法的实现算法如下:
此题有三种做法:
(1)使用java的replace方法
(2)使用一个额外的字符串做辅助
(3)在原字符串上修改
这三种做法的难度依次上升。
我主要来分析一下第三种做法,也是O(n)的一个做法。
第三种方法的思路:
先遍历一遍字符串,这样就能统计出字符串中空格的总数,并可以由此计算出替换之后的字符串长度。
每替换一个空格,长度增加2,因此替换以后字符串的长度等于原来的长度加上2*空格的数目。
我们从字符串的后面开始复制和替换,首先准备两个指针,P1和P2,P1指向原始字符串的末尾,P2指向替换之后字符串的末尾。
接下来,向前移动指针P1,逐个把它指向的字符复制到P2指向的位置,直到碰到第一个空格。
三种方法的实现算法如下:
package test01; public class test02 { public static void main(String[] args) { StringBuffer str = new StringBuffer(); str.append("hello world"); System.out.println(replaceSpaceFun1(str)); System.out.println(replaceSpaceFun2(str)); System.out.println(replaceSpace(str)); } //使用replace方法 public static String replaceSpaceFun1(StringBuffer str) { return str.toString().replaceAll(" ", "%20"); } //新建另外一个字符串 public static String replaceSpaceFun2(StringBuffer str) { StringBuffer out=new StringBuffer(); for(int i=0;i<str.length();i++){ if(str.charAt(i)==' '){ out.append("%20"); }else{ out.append(str.charAt(i)); } } return out.toString(); } //不新建字符串,在本身上修改 public static String replaceSpace(StringBuffer str) { int originalLength=str.length(); int blankNum=0; for (int i = 0; i < originalLength; i++) { if(str.charAt(i)==' '){ blankNum++; } } int newLength=originalLength+2*blankNum; int indexOriginal=originalLength-1; int indexNew=newLength-1; //将str的长度扩展为变为%20后的长度值 str.setLength(newLength); while(indexNew>indexOriginal&&indexOriginal>=0){ if(str.charAt(indexOriginal)==' '){ str.setCharAt(indexNew--, '0'); str.setCharAt(indexNew--, '2'); str.setCharAt(indexNew--, '%'); }else{ str.setCharAt(indexNew--, str.charAt(indexOriginal)); } --indexOriginal; } return str.toString(); } }
相关文章推荐
- 算法题目---替换空格
- 题目1510:替换空格
- 校招准备系列:每天一道算法题(11)-替换空格
- 题目:请实现一个函数,将一个字符串中的空格替换成“%20”
- 字符串替换空格算法
- 算法--替换字符串的空格为指定字符
- 重拾算法之剑指Offier——替换空格
- [面试] 算法(五)—— 替换字符串中的空格
- 面试题目4:替换空格
- 经典算法面试题目-替换字符串的内容(1.5)
- 字符串中空格替换为%20(算法)
- 剑指offer-4/题目1510:替换空格
- [九度OnlineJudge][剑指Offer]题目1510:替换空格
- 九度oj_题目1510:替换空格
- 九度OJ-题目1510:替换空格
- 每天一个算法练习之字符空格替换
- 替换空格算法
- 剑指offer面试题4:替换空格 相关题目 排序的数组A2中所有数字插入到A1并保持排序
- 题目1510:替换空格 jobdu
- 题目1510:替换空格