面试题4. 替换空格
来源:互联网 发布:怎么复制筛选后的数据 编辑:程序博客网 时间:2024/06/02 06:33
题目描述
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy.
思路1:
new一个新的字符串,并在新的字符串上做操作,最后返回这个新的字符串。
可以使用java中的string replace()方法。
思路2:
在原始字符串上进行替换
在面试时,需要和面试官交流看看他的需求,以及确定选用哪种方案
Step1.
遍历一遍字符串”We Are Happy.”,获取空格的个数,以便计算替换后的新字符串的长度。
新字符串的长度等于原长度加上2乘以空格数。。因为我们将空格替换为“%20”相当于比原来一个空格多了两个字符。
本题中,“We Are Happy.”的长度是13,则新字符串“We%20Are%20Happy.”的长度是13 + 2 * 2 = 17
Java中,字符串不以’\0’为结尾。因为Java中的一切都是对象,字符串也是对象,有自己的长度。
Step2.
从后向前开始复制字符串。定义两个变量i、j。
i初始化为输入字符串的结尾,j初始化为扩充后字符串的结尾。
依次将i指向的字符复制到j指向的字符。当i指向的字符为空格时,在j、j-1、j-2处分别插入”%”、”2”、”0”即可。
Java代码如下:
StringBuffer 的setLength()方法,用于设置字符序列的长度。可以扩充原始字符序列的长度。
StringBuffer 的setCharAt(index, ch)方法,可以设置对应位置上的字符。
public class ReplaceSpace { public String replaceSpace(StringBuffer str) { int count = 0; int oldLen = str.length(); for(int i = 0; i < oldLen; i++) { if(str.charAt(i) == ' ') { count++; } } // 新字符串的长度等于原长度加上2乘以空格数 int newLen = oldLen + count * 2; // setLength()方法,用于设置字符序列的长度。可以扩充原始字符序列的长度。 str.setLength(newLen); //扩展字符串 int i = oldLen - 1; int j = newLen - 1; while(i < j) { if(str.charAt(i) != ' ') { // setCharAt(index, ch)方法,可以设置对应位置上的字符。 str.setCharAt(j, str.charAt(i)); j--; } else { str.setCharAt(j--, '0'); str.setCharAt(j--, '2'); str.setCharAt(j--, '%'); } i--; } return str.toString(); } public static void main(String[] args) { // TODO Auto-generated method stub ReplaceSpace r = new ReplaceSpace(); StringBuffer sb = new StringBuffer("We Are Happy."); String s = r.replaceSpace(sb); System.out.println(s); }}
思考题:
有两个排序后的数组A1和A2,在A1末尾有足够多的空间存储A2,请实现一个方法,把A2中的数字插入到A1中。
和这道题的思路一样,从尾开始,依次比较A1和A2中的数字,把大的存储到A1的末尾。这样就避免了多次移动A1中的数字。
java代码如下:
int[] a = {1,3,5,7,0,0,0};int[] b = {2,4,6};int i = 3, j = 2;int p = 6;while(i >= 0 && j >= 0) { if(a[i] < b[j]) { a[p--] = b[j--]; }else{ a[p--] = a[i--]; }}System.out.println(Arrays.toString(a)); // [1, 2, 3, 4, 5, 6, 7]
- 面试题4. 替换空格
- 面试题:替换空格
- 剑指offer-面试题4.替换空格
- 面试题之替换空格
- 面试题4:替换空格
- 面试题 -- 字符串替换空格
- 面试题4 替换空格
- 面试题4:空格替换
- 面试题4-替换空格
- 面试题4 替换空格
- 面试题四:替换空格
- 面试题4:替换空格
- 面试题4 替换空格
- 面试题4:替换空格
- 面试题2:替换空格
- 面试题4:替换空格
- 面试题4:替换空格
- 面试题5:替换空格
- HDU2845
- Android6.0/7.0/O的新特性
- opencv学习笔记
- linux下挂载U盘
- BZOJ-1042 [HAOI2008]硬币购物 容斥原理 +01背包方案数
- 面试题4. 替换空格
- protobuf入门:二
- 1023. 组个最小数 (20)
- win32学习01.编程基础
- SoapUI5.2.1入门REST测试
- 编程之美2.8 找符合条件的整数
- e^x的导数仍为e^x
- python装饰器 & flask 通过装饰器 实现 单点登录验证
- 二叉排序树(BST)