剑指offer —— 替换空格
1.问题:请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
2.思路:可能首先想到的应该就是 str.replaceAll("\\s", "%20"),在工作当中肯定可以这样写,但是如果是面试的话,主要考的是编程能力,而不是熟悉API的程度;
一种想法是在原有的字符串进行替换,但是只适用于在替换字符的长度和被替换字符长度一致时,才可以使用;
另一种想法是在 先计算替换之后字符串的长度,再新建一个字符串,用来存放替换之后的字符串,这里采用这种方式;
3.代码:
①:不使用 StringBuilder 和 StringBuffer
public String replaceSpace(String s) {
//1.判断有多少空格
int spaceNum = 0;
for(int i = 0 ; i < s.length();i++){
if(s.charAt(i) == ' '){
spaceNum++;
}
}
if(spaceNum != 0){
//2.需要的长度
int newLen = s.length() + 2 * spaceNum;
char[] newChars = new char[newLen];
int position = 0;
//3.开始替换
for(int i = 0 ; i < s.length() ; i++){
if(s.charAt(i) == ' '){
newChars[position++] = '%';
newChars[position++] = '2';
newChars[position++] = '0';
}else{
newChars[position++] = s.charAt(i);
}
}
s = new String(newChars);
}
return s;
}
②使用 StringBuffer
public String replaceSpace(StringBuffer str) {
//1.判断有多少空格
int spaceNum = 0 ;
for(int i = 0 ; i < str.length();i++){
if(str.charAt(i) == ' '){
spaceNum++;
}
}
if(spaceNum != 0){
//2.需要的长度
int oldLen = str.length();
int newLen = oldLen + 2 * spaceNum;
str.setLength(newLen);
int position = newLen - 1;
//3.开始替换,从后往前移动,每次则只移动一个字符
for(int i = oldLen - 1 ; i >= 0 ; i-- ){
if(str.charAt(i) == ' '){
str.setCharAt(position-- , '0');
str.setCharAt(position-- , '2');
str.setCharAt(position-- , '%');
}else{
str.setCharAt(position-- , str.charAt(i));
}
}
}
return str.toString();
}
③使用 StringBuilder
public String replaceSpace(StringBuffer str) {
if(str == null){
return null;
}
StringBuilder sb = new StringBuilder();
for(int i = 0 ; i < str.length();i++){
if(str.charAt(i) == ' '){
sb.append('%');
sb.append('2');
sb.append('0');
}else{
sb.append(str.charAt(i));
}
}
return sb.toString();
}
剑指offer —— 替换空格的更多相关文章
- 剑指Offer 替换空格
题目描述 请实现一个函数,将一个字符串中的空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 思路: 替换空格,先遍历一遍记 ...
- 剑指Offer——替换空格
题目描述: 请实现一个函数,将一个字符串中的空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 分析: 如果从前往后替换空格,那 ...
- 用js刷剑指offer(替换空格)
题目描述 请实现一个函数,将一个字符串中的每个空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 牛客网链接 js代码 func ...
- 剑指offer替换空格
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...
- 【算法训练营day8】LeetCode344. 反转字符串 LeetCode541. 反转字符串II 剑指Offer05. 替换空格 LeetCode151. 翻转字符串里的单词 剑指Offer58-II. 左旋转字符串
[算法训练营day8]LeetCode344. 反转字符串 LeetCode541. 反转字符串II 剑指Offer05. 替换空格 LeetCode151. 翻转字符串里的单词 剑指Offer58- ...
- 剑指offer——替换字符串
总结:先计算出总共有多少空格,count++:然后从后往前遍历,每遇到一个空格,count--: 替换空格 参与人数:2119时间限制:1秒空间限制:32768K 通过比例:20.23% ...
- 剑指offer 替换字符串中的空格
void replaceSpace(char *str,int length) { ) return; ; ; ; while(str[originlen]!='\0') { if(str[origi ...
- 剑指Offer-2.替换空格(C++/Java)
题目: 请实现一个函数,将一个字符串中的每个空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 分析: 题意明确,就是将一个字符 ...
- 剑指Offer_5_替换空格
题目描述 请实现一个函数,将一个字符串中的空格替换成"%20". 例如,当字符串为We Are Happy.则经过替换之后的字符串为 We%20Are%20Happy. 在网络编程 ...
随机推荐
- Striker-一款功能较多的web渗透工具
项目地址:https://github.com/UltimateHackers/Striker 首先下载项目,并打开 ┌─[root@sch01ar]─[/sch01ar] └──╼ #git clo ...
- JavaScript语言基础-包装对象
- Android Binder 系统学习笔记(一)Binder系统的基本使用方法
1.什么是RPC(远程过程调用) Binder系统的目的是实现远程过程调用(RPC),即进程A去调用进程B的某个函数,它是在进程间通信(IPC)的基础上实现的.RPC的一个应用场景如下: A进程想去打 ...
- 计算数组arr中所有元素的和
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- JavaScript中数值和对象
一.创建对象并将其初始化 a.使用new创建对象和方法 <<!DOCTYPE html> <html> <head> <mete http-equiv ...
- js中的控制结构for-in语句
var arr=['赵','钱','孙','李']; for(var i=0;i<arr.length;i++){ console.log(arr[i]); } var obj={ name:' ...
- [poj1509]Glass Beads(最小表示法)
题目大意:求循环同构的字符串的最小字典序. 解题关键:最小表示法模板题. #include<cstdio> #include<cstring> #include<algo ...
- 分布式锁2 Java非常用技术方案探讨之ZooKeeper 【转载】
前言: 由于在平时的工作中,线上服务器是分布式多台部署的,经常会面临解决分布式场景下数据一致性的问题,那么就要利用分布式锁来解决这些问题.以自己结合实际工作中的一些经验和网上看到的一些资料 ...
- ROS Learning-020 learning_tf-04(编程)让turtle2 海龟跟随turtle1海龟,并绕着 turtle1海龟转圈 (Python版)
ROS Indigo learning_tf-04 (编程)让 turtle2 海龟跟随 turtle1 海龟,并绕着 turtle1 海龟转圈 (Python版) 我使用的虚拟机软件:VMware ...
- 简单VBS教程.RP
Mimick同菜鸟==.文转豆瓣~:https://www.douban.com/note/88562379/ 讲一下VBScript.主要面向菜鸟,懂得编程的朋友就不要浪费时间了,如果你想接触以下V ...