剑指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调整数组顺序使奇数位于偶数之前
题目: 输入一个整数数组,实现一个函数来调整该数组中数组的顺序,使得所有的奇数位于数组的前半部分,偶数位于数组的后半部分. 解题思路:数组中维护两个指针,第一个指针初始化时候指向数组头部,第二个指针初 ...
随机推荐
- jquery或者JavaScript调用WCF服务的方法
/****************************************************************** * Copyright (C): 一心堂集团 * CLR版本: ...
- js实现环形菜单效果
点击中间的圆点,会弹出环形菜单,效果图: 代码: <!DOCTYPE html> <html> <head> <meta charset="UTF- ...
- datagrid 扩展 页脚 合计功能
效果图:合计信息展示在页脚中(showFooter:true) code: <!DOCTYPE html> <html> <head> <meta chars ...
- Nodejs学习笔记:基础
本文章主要记录Nodejs基础知识点 安装 首先从Node.js官网下载安装包,并添加到环境变量.然后打开命令行,输入 node --version ,可查看版本信息 npm是Node.js的包管理工 ...
- 19 模块之shelve xml haslib configparser
shelve 什么是shelve模块 也是一种序列化方式使用方法 1.opne 2.读写 3.close特点:使用方法比较简单 提供一个文件名字就可以开始读写 读写的方法和字典一致 你可以把它当成带有 ...
- Ubuntu 16.04 安装 postgresql 9.3
1.Ctrl+Alt+t 打开终端 2.输入:wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo a ...
- w7 目录
第17章 期中架构体系介绍 期中架构环境准备 01-期中架构内容简介 02-期中架构大酒楼详解 03-期中架构使用到的软件简介 04-期中架构运维角度观察与使用的软件 05-重头开始创建一台新的虚拟机 ...
- BitMap的简单实现
面试结束的这些日子好几次接触到BitMap这个东西.到底是啥呢,究其原因就是虽然它的使用条件较为苛刻,但是它对应的时间复杂度和空间复杂度真的是惊人的好. 首先是根据其思想先写了一个比较差的实现代码: ...
- 第15章:MongoDB-聚合操作--聚合管道--$match
①$match 用于对文档集合进行筛选,里面可以使用所有常规的查询操作符. 通常会放置在管道最前面的位置,理由如下: 1:快速将不需要的文档过滤,减少后续操作的数据量 2:在投影和分组之前做筛选,查询 ...
- jquery取消事件冒泡的三种方法展示
jquery取消事件冒泡的三种方法展示 html代码 <!doctype html> <html> <head> <meta charset="ut ...