剑指offer编程题Java实现——替换空格
题目描述
package Solution; /**
* 剑指offer面试题4:替换空格
* 题目:请事先一个函数,把字符串中的每个空格替换成"%20"。
* 例如输入"We are happy.",则输出"We%20are%20happy."。
* @author GL
*
*/
public class No4ReplaceSpace { public static void main(String[] args) {
String string1="We are happy.";
String string2=" We are happy. ";
String string3="Wearehappy.";
//String string4=null;
String string5="";
String string6=" ";
String string7=" ";
System.out.println(replaceSpace(string1.toCharArray()));
System.out.println(replaceSpace(string2.toCharArray()));
System.out.println(replaceSpace(string3.toCharArray()));
//System.out.println(replace(string4.toCharArray()));
System.out.println(replaceSpace(string5.toCharArray()));
System.out.println(replaceSpace(string6.toCharArray()));
System.out.println(replaceSpace(string7.toCharArray()));
System.out.println(replaceSpace(new StringBuffer(string1)));
System.out.println(replaceSpace(new StringBuffer(string2)));
System.out.println(replaceSpace(new StringBuffer(string3)));
//System.out.println(replaceSpace(new StringBuffer(string4)));
System.out.println(replaceSpace(new StringBuffer(string5)));
System.out.println(replaceSpace(new StringBuffer(string6)));
System.out.println(replaceSpace(new StringBuffer(string7)));
} /*
* 时间复杂度为O(n)的解法:利用数组从后向前替换
* 1、先遍历一次字符串,统计出要替换的字符的个数
* 2、创建新的临时数组,数组长度为初始字符串字符个数+替换每个字符多出来的字符个数*要替换的字符个数
* 3、从原来字符串数组后面开始向前进行复制、替换到临时数组。两个数组下标变量分别为原始字符数组长度-1,临时数组长度-1
* 4、原始字符数组的字符如果不为空格,则把这个字符复制到临时数组的对应位置,两个数组下标都减1
* 5、原始字符数组的字符如果为空格,则把临时数组相对应的位置从后向前依次写入替换的字符,临时数组下标减少相应的替换的字符数量
* 6、循环复制替换,直到初始数组的下标小于0,此时替换完毕,临时数组转换成字符串后返回
*/
public static String replaceSpace(char[] string){
if(string==null)
return null;
int originalLength=string.length;
int spaceCount=0;
for(int i=0;i<originalLength;i++){
if(string[i]==' ')
spaceCount++;
}
int newLength=originalLength+2*spaceCount;
char[] temp=new char[newLength];
int i=originalLength-1;
int j=newLength-1;
while(i>=0){
if(string[i]==' '){
temp[j]='0';
temp[j-1]='2';
temp[j-2]='%';
j=j-3;
}else{
temp[j]=string[i];
j=j-1;
}
i=i-1;
}
return new String(temp);
} /*
* 时间复杂度为O(n),利用StringBuffer实现
* 通过indexOf(String str,int fromIndex)方法和subSequence(int start,int end)方法联合实现
*/
public static String replaceSpace(StringBuffer str){
if(str==null)
return null;
int fromIndex=0;
int index=0;
StringBuffer temp =new StringBuffer();
while(index<=str.length()){
index=str.indexOf(" ",fromIndex);
if(index>=0){
temp.append(str.subSequence(fromIndex, index)).append("%20");
index=index+1;
fromIndex=index;
}else{
temp.append(str.substring(fromIndex, str.length()));
break;
}
}
return temp.toString();
} }
剑指offer编程题Java实现——替换空格的更多相关文章
- 剑指offer编程题Java实现——面试题4替换空格
题目描述 请实现一个函数,将一个字符串中的空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. package Solution; ...
- 剑指offer编程题Java实现——面试题5从头到尾打印链表
题目描述* 剑指offer面试题5:从尾到头打印链表 输入一个链表的头结点,从尾到头打印出每个结点的值 解决方案一:首先遍历链表的节点后打印,典型的"后进先出",可以使用栈来实现这 ...
- 剑指offer编程题Java实现——面试题12相关题大数的加法、减法、乘法问题的实现
用字符串或者数组表示大数是一种很简单有效的表示方式.在打印1到最大的n为数的问题上采用的是使用数组表示大数的方式.在相关题实现任意两个整数的加法.减法.乘法的实现中,采用字符串对大数进行表示,不过在具 ...
- 剑指offer编程题Java实现——面试题10二进制中1的个数
题目: 请实现一个函数,输入一个整数,输出该整数二进制表示中1的个数.例如,把9表示成二进制是1001,有2位是1,该函数输出2解法:把整数减一和原来的数做与运算,会把该整数二进制表示中的最低位的1变 ...
- 剑指offer编程题Java实现——面试题7相关题用两个队列实现一个栈
剑指offer面试题7相关题目:用两个队列实现一个栈 解题思路:根据栈的先入后出和队列的先入先出的特点1.在push的时候,把元素向非空的队列内添加2.在pop的时候,把不为空的队列中的size()- ...
- 剑指offer编程题Java实现——面试题7用两个栈实现队列
题目:用两个栈实现一个队列.队列的声明如下:请实现他的两个函数appendTail和deleteHead, 分别完成在队列尾部插入节点和在队列头部删除节点的功能. package Solution; ...
- 剑指offer编程题Java实现——面试题6重建二叉树
题目: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2, ...
- 剑指offer编程题Java实现——面试题11数值的整数次方
题目: 实现函数double power(double base,int exponent),求base的exponent次方.不得使用库函数,同时不需要考虑大数问题. 解题思路:最一般的方法实现数值 ...
- 剑指offer编程题Java实现——面试题12打印1到最大的n位数
题目:打印1到最大的n位数 输入数字n,按顺序打印输出从1到最大的n位十进制数,比如输入3,打印从1到999. 这道题考察的地方是如何表示大数问题.由于n是任意大的数组,如果n太大的话n位数就超过了l ...
随机推荐
- UVa 374 - Big Mod
题目大意:计算R = BP mod M,根据模运算的性质计算. 正常计算会超时,可以用分治的思想降低时间复杂度.不过如果遇到00,结果...话说00的结果是1吗?忘了都... #include < ...
- HDU 2830:Matrix Swapping II(思维)
http://acm.hdu.edu.cn/showproblem.php?pid=2830 题意:-- 思路:对于每一列,它是固定的,用dp[][]处理出连续的长度.例如: 假设我们扫第四列的时候, ...
- SpringMVC常用注解@Controller,@Service,@repository,@Component
SpringMVC常用注解@Controller,@Service,@repository,@Component controller层使用@controller注解 @Controller 用于标记 ...
- Android应用程序组成部分
引言 为了后面的例子做准备,本篇及接下来几篇将介绍Android应用程序的原理及术语,这些也是作为一个Android的开发人员必须要了解,且深刻理解的东西.本篇的主题如下: 1.应用程序基础 2.应用 ...
- 超强JavaScript编辑器WebStorm代码提示迟缓问题及其它想到的
去D2后发现 Hedger 的js编辑器是webStorm,便下载来试试,结果发现: 虽然WebStorm的js的提示远远不如aptana那么强悍(输入字母d不提示document),但是做为 Int ...
- CSS控制之IE常见BUG及解决方案
常见bug 解决方案 盒模型bug 使用严格doctype声明 双倍margin bug _display:inline; 不认识a:link 不加:link 3像素margin bug 规范浮动与清 ...
- 用Linux命令行获取本机外网IP地址
引言:目前获取ip的方法中,ifconfig和ip获取函数得到的都是内网ip.有时候需要获取外网ip,目前通用的做法,是向外部服务器发送请求,解析外部服务器响应,从而得到的自己的外网ip.linux下 ...
- MyBatis中的条件判断单引号双引号的使用
对于字符串判断, <if test="aIn != 'A'" >会出现问题,系统会试图把'A'转成数字,改为 <if test='aIn != "A&q ...
- Canvas 阴影效果
shadow <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...
- promise/bluebird源码
本作品采用知识共享署名 4.0 国际许可协议进行许可.转载保留声明头部与原文链接https://luzeshu.com/blog/bluebirdsource 本博客同步在http://www.cnb ...