剑指Offer5.替换空格

剑指Offer5.替换空格

1.概述

好几天没有更新博客了,最近一直在做学习和生活上的一些调整,因为上周的京东复试之后春招基本已经结束,我就把关注点放在了学校课程复习还有项目上面,值得欣慰的是目前京东官网已经将状态更新为hr面,希望能够获得机会吧。这几天也一直没有做算法题,也是刚刚从腾讯笔试踩坑的自闭中走出来吧,不多说了,下面开始写题解
题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

2.解题

对字符串进行遍历,并进行拼接,如果遇到空格就拼接“20%”

public class Solution {
    public String replaceSpace(StringBuffer str) {
    	if(str == null)
            return null;
        StringBuilder newStr = new StringBuilder();
        for(int i = 0;i < str.length();i++){
            if(str.charAt(i) == ' '){
                newStr.append("%20");
                
            }else{
                newStr.append(str.charAt(i));
            }
        }
        return newStr.toString();
    }
}

思路:
当遇到空格时,需要在字符串末尾添加两个字符使得字符串长度和填充之前的相等,令p1指向原来字符串的末尾,p2指向填充之后字符串的末尾,如果p1指向空格,那么将p2依次进行赋值为"02%",一定要是反向的,因为执行的是p2--操作,如果p1指向的是普通字符,那么p2赋值为p1即可

实现:

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