剑指Offer每日一刷 -2017年11月11日
来源:互联网 发布:java锁的种类 编辑:程序博客网 时间:2024/05/19 03:28
题目描述
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
方法一:使用JDK API进行替换
public class ReplaceBackspace { public String replaceSpace(StringBuffer str) { String string = str.toString(); String replace = string.replace(" ", "%20"); return replace; }}
方法二:
/*
问题1:替换字符串,是在原来的字符串上做替换,还是新开辟一个字符串做替换!
问题2:在当前字符串替换,怎么替换才更有效率(不考虑java里现有的replace方法)。
从前往后替换,后面的字符要不断往后移动,要多次移动,所以效率低下
从后往前,先计算需要多少空间,然后从后往前移动,则每个字符只为移动一次,这样效率更高一点。
思路是:1.先计算出str中有多少个 空格;
2.计算出将空格替换成"%20"后,str的长度newLength
3.设置str的长度为newLength,长度会增加,新增加的长度没有值
4.对str按照原有长度从后向前遍历,将每个字母按照新的长度从后向前进行赋值,
赋值到后面之后字母所在的原位置就可以被其他符号占用,且不会影响到原有的字符。
5.遇到空格后,插入'0','2','%'
*/
public String replaceSpace(StringBuffer str){ //统计str中的space个数 int spaceNum = 0; //记录space的个数 for(int i=0;i < str.length();i++){ if(str.charAt(i) == ' '){ //判断i索引处的char字符是否是' ' spaceNum ++; } } int oldLength = str.length(); int newLength = str.length()+ spaceNum*2; //%20占有三个字符才长度,所以在原有的space的基础上添加spaceNum*2 int oldIndex = oldLength-1; int newIndex = newLength-1; //StringBuffer newStr; str.setLength(newLength); //对已有的str从后向前遍历,遇到 ' '时 插入'%', '2','0' for(;oldIndex>=0 && oldIndex < newLength;--oldIndex){ if(str.charAt(oldIndex) == ' '){ str.setCharAt(newIndex--,'0'); str.setCharAt(newIndex--, '2'); str.setCharAt(newIndex--, '%'); }else{ str.setCharAt(newIndex--, str.charAt(oldIndex)); } } return str.toString(); }
方法三:
public static String replaceSpace(StringBuffer str){ if(str==null) {return "%20";} char[] ss = str.toString().toCharArray(); StringBuffer sb = new StringBuffer(); for(int i=0;i<ss.length;i++){ if(ss[i] == ' '){ sb.append("%20"); }else{ sb.append(ss[i]); } } return sb.toString(); }
阅读全文
0 0
- 剑指offer每日一刷-2017年11月24日(补2017年11月23日)
- 剑指Offer每日一刷 -2017年11月11日
- 剑指Offer每日一刷 -2017年11月10日
- 剑指offer每日一刷-2017年11月12日
- 剑指offer每日一刷-2017年11月13日
- 剑指offer每日一刷-2017年11月14日
- 剑指offer每日一刷-2017年11月15日
- 剑指offer每日一刷-2017年11月16日
- 剑指offer每日一刷-2017年11月17日
- 剑指offer每日一刷-2017年11月19日
- 剑指offer每日一刷-2017年11月20日
- 剑指offer每日一刷-2017年11月21日
- 剑指offer每日一刷-2017年11月22日
- 剑指offer每日一刷-2017年11月24日
- 剑指offer每日一刷2017年12月5日
- IDEA每日提醒2017年11月3日
- 剑指offer每日一刷
- 6月11日,每日20行。
- 大数据实时计算storm零基础小白到高级实战必修之路精品推荐
- python之r.raise_for_status()
- Linux的文件权限与目录配置
- SVN提交文件失败:系统找不到指定路径
- imax6q项目:使用psplash制作开机动画
- 剑指Offer每日一刷 -2017年11月11日
- android实现自定义view
- 反射机制(Reflection)详细解析(1)
- c语言实现求第n个斐波那契数。(递归和非递归)
- 《HTML之路径问题》
- Android学习之隐藏虚拟按键的实现
- Git 安装和本地服务器构建
- Collection接口的使用
- java 文件上传到ftp