《剑指Offer》替换空格(将字符串中的空格替换为%20)
来源:互联网 发布:android apk安装源码 编辑:程序博客网 时间:2024/05/16 18:57
题目:
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为 We Are Happy.则经过替换之后的字符串为 We%20Are%20Happy。
思路:
这种替换问题要考虑是否会覆盖原字符串,若是在源字符串上直接替换。
看到这个问题我觉得很多人都会想到直接从头开始替换,即遇到空格就将其替换为%20,每次都要将空格后的字符后移两个字节。这种解法的时间复杂度为O(n^2)!!!
另外一种较好的解法是从后往前替换,具体做法是从头遍历计算所有空格数,计算出总的长度。 该解法的前提条件是若在源字符串上替换就要求源字符串有足够的空间来容纳新的字符串。时间复杂度为O(n)!!!
public String replaceSpace(StringBuffer str) { //toCharArray()函数会返回一个新的数组, //因此就算原数组定义了长度,返回的新数组会取代它 char[] ch = str.toString().toCharArray(); int spacenum = 0; //空格数量 for(int i =0; i<ch.length; i++){ if(ch[i]==' '){ spacenum++; //如果是空格,加1 } } char[] ch1 = new char[2*spacenum + str.length()]; int len = 2*spacenum+str.length()-1; for(int i=ch.length-1; i>=0; i--){ if(ch[i] != ' '){ ch1[len--] = ch[i]; }else{ ch1[len--] = '0'; ch1[len--] = '2'; ch1[len--] = '%'; } } return String.valueOf(ch1); }
还有一种方法虽然很简单(调用 Java API中的 replaceAll 方法·),但是估计面试官不是想这样考你的。
public static String replaceSpace(StringBuffer str) { return str.toString().replaceAll("\\s", "%20"); //\s表示空格(正则表达式)string.toString();
所有代码(算法+测试)详见: Github/字符串空格替换成%20
阅读全文
0 0
- 《剑指Offer》替换空格(将字符串中的空格替换为%20)
- 《剑指Offer》替换空格(将字符串中的空格替换为%20)
- 替换空格(将字符串中的空格替换为20%)
- 剑指offer面试题:替换空格(将字符串每个空格替换为%20)
- 剑指offer - 将字符串中空格替换为20%
- 将字符串中的空格替换为“20%”
- 将字符串中的空格替换为%20
- 将字符串中的空格替换为“%20”
- 将字符串中的空格替换为%20
- 【剑指offer】将字符串中的空格替换成"%20"
- 【剑指offer】将空格替换制定字符串
- 剑指offer-字符串空格替换为“ ”
- 【剑指offer】替换字符串中的空格_04
- 【剑指offer】替换字符串中的空格
- 剑指offer之替换字符串中的空格
- 1.5 编写代码将字符串中的空格替换为‘%20 ’
- 将一个字符串中的空格全部替换为“%20”
- 将一个字符串中的空格替换为“%20”(java)
- 字节码指令级别从i++说到volatile,深入理解i++的线程安全问题
- 实现1+2+3...+n,要求不能使用乘除法、循环、条件判断、选择相关的关键字。
- codeforce 149D:Coloring Brackets(区间dp)
- HDU 3966 Aragorn's Story [树链剖分]
- POJ 3123 Ticket to Ride 笔记
- 《剑指Offer》替换空格(将字符串中的空格替换为%20)
- ATECC508A芯片开发笔记(一):初识加密芯片
- 文章标题
- linux下MySQL数据库安装初始化
- Python对象 继承 多态 获取对象信息 类的属性
- -----找规律 ZOJ 3829-Known Notation
- 基于Spring Boot和Spring Cloud实现微服务架构学习
- 第七天-Java常用类之一
- 选弹球