剑指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. 在网络编程 ...
随机推荐
- Jenkins关闭、重启,Jenkins服务的启动、停止方法。
一.Jenkins关闭.重启 1.关闭Jenkins 只需要在访问jenkins服务器的网址url地址后加上exit,关闭Jenkins服务. 例如:http://localhost:8081/ex ...
- PostgreSQL recovery.conf恢复配置
PostgreSQL recovery.conf恢复配置 这一章描述recovery.conf 文件中可用的设置.它们只应用于恢复期.对于你希望执行的任意后续恢复, 它们必须被重置.一旦恢复已经开始, ...
- mybatis 学习二 MyBatis简介与配置MyBatis+Spring+MySql
1.2.2建立MySql数据库 在C:\Program Files\MySQL\MySQL Server 5.7\bin下面: 首先连接MySQL: mysql -u root -p ...
- Microsoft Sync Framework下的快速开发同步程序
Microsoft Sync Frameworks简称MSF,是一个综合的同步平台,MSF支持应用程序,服务,设备的在线以及离线同步.MSF主要有以下几个部件组成: * Sync Servic ...
- python中匹配中文,解决不匹配,乱码等问题
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe7 in position 0: ordinal 字符串前加 ur‘str’即可;
- apache 禁delete
<VirtualHost *:80>ServerAdmin sunqz@jerei.comDocumentRoot /web/dasdf ServerName www.abc.com &l ...
- mysql的安装以及简单的命令符
在百度当中输入mySQL就可以下载了. 我们只需要一路的点击next就好了,注意,我们在安装的过程当中它会问我们是否要安装路径,我么要选择是. 在显示安装完成之后呢,我们会看到一个复选框,上面写着是否 ...
- android键盘的Done按钮
在EditText中,可以使用setImeOptions()方法来来开启软键盘的"Done"按钮. 示例代码如下:editText.setImeOptions(EditorInfo ...
- this、new、call和apply的相关问题
讲解this指针的原理是个很复杂的问题,如果我们从javascript里this的实现机制来说明this,很多朋友可能会越来越糊涂,因此本篇打算换一个思路从应用的角度来讲解this指针,从这个角度理解 ...
- 卸载phonegap
npm uninstall cordova -gnpm uninstall phonegap -g