0
点赞
收藏
分享

微信扫一扫

[每日一道小算法(三)] [字符串] 空字符替换


前言:
又到了今日分享算法一刻,今天这道题是剑指offer上面的一道算法,今天在这里讲解一下。

题目描述

请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

输入样例:

We are happy

输出样例:

We%20are%20happy

题目分析

看到这道题,首先我们就会想到两种方法,第一种,在当前字符串进行替换。第二种,开辟一个新的新字符串。
其实这两种方法大概流程是一样的,都是先计算替换后的字符串需要多大的空间,然后对当前字符串进行扩容,或者创建一个新的字符串。然后定义两个指针,指向末尾,从后向前进行字符串移动,每个字符串只需要移动一次。这里你们就会有疑问了,为什么不是从前向后移动呢,假设从前向后移动,那么每个字符串就不是移动一次这么简单了。需要多次移动,效率就低了。
其实还有一种方法,使用JAVA自带的函数str.toString().replace(" “,”%20")。这样就可以了。

代码样例

分析好了这道题,我们就可以写代码了,为了保证代码的耦合性,需要多个测试用例进行验证。验证如下;

package com.company.asong.replaceSpace;

public class Solution {
//定义方法
public static String replaceSpace(StringBuffer str)
{
//记录空字符个数
int numBlank =0;
int len = str.length();
for(int i=0;i<len;i++)
{
if(str.charAt(i) == ' ')
{
numBlank++;
}
}
//对StringBuffer进行扩展
str.setLength(len+2*numBlank);
//建立两个索引
int index1 = len - 1;
int index2 = len + 2*numBlank - 1;
while(index1>=0)
{
if(str.charAt(index1) == ' ')
{
index1--;
str.setCharAt(index2--,'0');
str.setCharAt(index2--,'2');
str.setCharAt(index2--,'%');
}else
{
str.setCharAt(index2--,str.charAt(index1));
index1--;
}
}
return new String(str);
}

public static void main(String[] args)
{
// 传入为空时
StringBuffer stringBuffer0 = new StringBuffer();
String a0 = replaceSpace(stringBuffer0);
System.out.println(a0);
//空格句子在中间
StringBuffer stringBuffer1 = new StringBuffer("hello world");
String a1 = replaceSpace(stringBuffer1);
System.out.println(a1);
//空格句子在开头
StringBuffer stringBuffer2 = new StringBuffer(" helloworld");
String a2 = replaceSpace(stringBuffer2);
System.out.println(a2);
//空格句子在末尾
StringBuffer stringBuffer3 = new StringBuffer("helloworld ");
String a3 = replaceSpace(stringBuffer3);
System.out.println(a3);
//连续两个空格
StringBuffer stringBuffer4 = new StringBuffer("hello world ");
String a4 = replaceSpace(stringBuffer4);
System.out.println(a4);
// 传入字符串没有空格
StringBuffer stringBuffer5 = new StringBuffer("helloworld ");
String a5 = replaceSpace(stringBuffer5);
System.out.println(a5);
}
}

测试结果如下:

[每日一道小算法(三)] [字符串] 空字符替换_i++

此道算法题到此验证完毕!!!!!


举报

相关推荐

0 条评论