算法练习:将字符串中所有的空格替换为'%20'(只用基本数据结构)
2013-07-17 17:35
363 查看
package codinginterview; /** * 写一个函数,把字符串中所有的空格替换为%20 。 * 分析: * 先遍历一次字符串,得到空格个数,进而得到将空格转换成%20后的串长度 (每个空格替换为%20需要增加2个字符,x个空格增加2x个字符)。 * 然后从后向前依次对空格进行替换,非空格原样拷贝。 * 如果原串有足够大的空间, 则替换过程直接在原串上进行, 因为从后向前替换的过程中,新串用到的空间一定是旧串不需要的空间; * 如果原串的空间不够大,或是就直接是字符串长度,那么就新开一个串来保存替换后的结果. * @author mingdong.cheng * */ public class ReplaceStr { /** * 新开一个数组来保存替换后的结果 * O(n) * @param s * @return */ public static String replace(String s) { if (s == null || s.length() == 0) return s; final char[] c = s.toCharArray(); int len = c.length; int count = 0; for (int i=0;i<len;i++) { if (c[i]==' ') { ++count; } } //新开一个数组来保存替换后的结果 //每个空格替换为%20后需要增加2个字符,count个空格增加2*count个字符 final char[] d = new char[len+2*count]; int idx=0; for (int i=0;i<len;i++) { if (c[i]==' ') { d[idx]='%'; d[idx+1]='2'; d[idx+2]='0'; idx += 3; } else { d[idx]=c[i]; idx++; } } return String.valueOf(d); } public static String replace2(String s) { if (s == null || s.length() == 0) return s; int len=s.length(); int count = 0; //统计空格个数 for (int i=0;i<len;i++) { if (s.charAt(i)==' ') { ++count; } } //将原字符串扩容 for(int i=0;i<2*count;i++){ s=s.concat("\0"); } //扩容后,原串就会有足够大的空间;替换可直接在原串上进行; //从后向前依次对空格进行替换,非空格原样拷贝; //因为从后向前替换的过程中,新串用到的空间一定是旧串不需要的空间 final char[] c = s.toCharArray(); int idx=len-1+2*count; for (int i=len-1; i>=0; i--) { if (c[i] == ' ') { c[idx] = '0'; c[idx-1] = '2'; c[idx-2] = '%'; idx -= 3; } else { c[idx] = c[i]; idx--; } } return String.valueOf(c); } public static void main(String[] args) { String s = " i am danielcheng . i am coding ... "; System.out.println(replace(s)); System.out.println(replace2(s)); } }
相关文章推荐
- 算法练习:判断一个字符串中的字符是否唯一(只用基本数据结构)
- 算法练习:字符串原地逆序(in-place reverse)(只用基本数据结构)
- 算法练习:检测一个int(整型)数组中是否存在相同的数(只用基本数据结构)
- 实现函数,用字符串"%20"替换空格
- 【我的算法日记】请实现一个函数,把字符串中的每个空格替换成“%20”。例如输入“We are happy.”,则输出“We%20are%20happy.”。
- 微软等数据结构+算法面试100题(2)--给出一个函数来输出一个字符串的所有排列
- 数据结构——算法之(031)(将字符串中所有小写字母排在大写字母的前面)
- 字符串中的所有空格替换为“20%”
- 字符串替换空格的最优算法
- 将字符串 “ hello word,你 好 世 界 ! ” 两端空格去掉并且将其中的其他所有空格替换成一个空格 输出结果为“hello word,你 好 世界”
- 实现一个算法来判断一个字符串中的字符是否唯一(即没有重复).不能使用额外的数据结构。 (即只使用基本的数据结构)
- 程序员面试金典(3)字符串中空格替换为"%20"
- 判断一个字符串中的字符是否唯一(只用基本数据结构)
- CI1.1 实现一个算法,确定一个字符串的所有字符是否全部不同。假使不允许使用额外的数据结构。
- 判断一个字符串中的字符是否唯一(只用基本数据结构)
- 程序员面试金典: 9.1数组与字符串 4字符串中空格全部替换为"%20"
- 字符串的空格替换算法
- 把字符串中的空格替换为"%20"
- java 不复制字符串前提下替换字符串中的空格算法实现O(n)
- javascript 替换字符串中的所有空格