替换空格

第二题:替换空格

 

 

题目描述

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

 

解析:

在java的String字符串的API中有个方法replaceAll();需要传入的参数regex(匹配的正则)和repalcement(替换的字符),当然啦我们不可能直接跟面试官说调用java中的API呀!!!哈哈哈哈~~那我首先想到的是使用额外空间的解法,使用StringBuffer字符串缓冲区,首先遍历target目标字符串,且在遍历的同时将不是空格的字符append到StringBuffer,当匹配到空格则append("%20")。

优化解:在改变原来字符串的同时,使用指针的移动解题,首先遍历字符串,遇到空格就在原来字符串的基础上最后加上两个空格,然后初始化两个指针,一个old指针指向原字符串的最后一位,一个new指针指向改变后的字符串的最后一位,遍历old字符串然后进行替换。

 

例:

old:"We Are Happy"

new:"We Are Happy    "  //这里最后一共4个空格

替换空格_第1张图片

 

具体实现代码如下:
 

public class Solution {
    public String replaceSpace(StringBuffer str) {
        int length = str.length();
        for(int i = 0; i < length;i++){
            if(str.charAt(i) == ' '){
                str.append("  ");
            }
        }
        int oldIndex = length - 1;
        int newIndex = str.length()-1;
        while (newIndex > oldIndex && oldIndex >= 0){
            if (str.charAt(oldIndex) == ' '){
                str.setCharAt(newIndex--,'0');
                str.setCharAt(newIndex--,'2');
                str.setCharAt(newIndex--,'%');
            }else {
                str.setCharAt(newIndex--,str.charAt(oldIndex));
            }
            oldIndex--;
        }
        return str.toString();
    }
}

NowCoder(Online Coding, Please Click)

 

你可能感兴趣的:(剑指offer,剑指offer)