剑指offer编程题Java实现——面试题4替换空格
题目描述
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实现——面试题4替换空格的更多相关文章
- 剑指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 ...
- 剑指offer编程题Java实现——面试题14调整数组顺序使奇数位于偶数之前
题目: 输入一个整数数组,实现一个函数来调整该数组中数组的顺序,使得所有的奇数位于数组的前半部分,偶数位于数组的后半部分. 解题思路:数组中维护两个指针,第一个指针初始化时候指向数组头部,第二个指针初 ...
随机推荐
- IO之4种字节流拷贝文件方式对比
public class CopyMp4Demo { public static void main(String[] args) throws IOException { long start = ...
- 796. Rotate String
class Solution { public: bool rotateString(string A, string B) { if(A.length()==B.length()&& ...
- SQL语句备份和还原数据库
1,使用SQL最简单备份,还原数据库 1 /* 备份 */ 2 backup database Test to disk='D:/Test.bak' 3 /* 还原 */ 4 restore data ...
- 第9章 符合Python风格的对象
#<流畅的Python>读书笔记 # 第9章 符合Python风格的对象 # 本章包含以下话题: # 支持用于生成对象其他表示形式的内置函数(如repr().bytes(),等等) # 使 ...
- dj 中间件
中间件的概念 中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出.因为改变的是全局,所以需要谨慎实用,用不好会影响到 ...
- hadoop yarn组件介绍
Yarn的产生 mapReduc1.0 1单点故障 2扩展效率低 3资源利用率高 降低运维成本 方便数据共享 多计算框架支持 MapReduce Spark Storm Yarn的架构图 Yarn模块 ...
- Ng第十二课:支持向量机(Support Vector Machines)(一)
1 目录 支持向量机基本上是最好的有监督学习算法了,从logistic回归出发,引出了SVM,揭示模型间的联系,过渡自然. 2 重新审视logistic回归 Logistic回归目的是从特征学习出一个 ...
- 使用 vs.php 调试PHP相关问题
1. 使用mysql_connect()方法时报错"Call to undefined function mysql_connect()" 这是由于在php.ini没有启用mysq ...
- bzoj2388(分块 凸包)
好像没有什么高级数据结构能够很高效地实现这个东西: 那就上万能的分块,我们用一些数形结合的思想,把下标看成横坐标,前缀和的值看成纵坐标: 给区间内每个数都加k相当于相邻两点的斜率都加上k: 这种东西我 ...
- Mybatis类型转换介绍
1.1 目录 1.2 建立TypeHandler 1.2.1 TypeHandler接口 1.2.2 BaseTypeHandler抽象类 1.3 注册TypeHa ...