剑指 Offer 02. 替换空格

题目链接

替换空格

题目描述

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

解题思路

(1)直接利用java String中的replace函数即可。

String replace(char oldChar, char newChar) 
将字符串的oldchar替换为newchar并返回。

(2)遍历字符串,如果不是空格就把遍历的字符添加到StringBuffer对象中,如果是空格就添加“%20”到StringBuffer对象中,最后调用StringBuffer.toString()即可。

(3)最笨的也就是最麻烦的麻烦,打扰了一开始我就用的这种方法,把一个字符串分为3个部分,并分别统计各个部分的空格数(字符串首部连续的空格数、字符串末尾开始的连续空格数,字符串内部的空格数),在统计字符串内部空格数的同时,也把单词存储在String数组中,例如“ We are student ”,字符串首部连续的空格数 = 2; 字符串末尾开始的连续空格数=2;字符串内部的空格数=2,且把建立了一个String数组,其内容为s[0]="we",s[1]="are",s[2]="student",最后把三部分组装起来即可。

AC代码

解法一

public String replaceSpace(String s) {
        return s.replace(" ", "%20");
    }

解法二

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

解法三

class Solution {
    public String replaceSpace(String s) {
        String ss = "%20";
        String[] sp = new String[10000];
        if(s.length() == 0) return s;
        //利用index统计字符串开始的连续空格数
        int index = 0;
        while(index < s.length()){
            if(s.charAt(index) == ' ') index++;
            else break;
        }
        //利用num统计字符串从末尾开始的连续空格数
        int p = s.length()-1;
        int num = 0;
        while(p>=0){
            if(s.charAt(p)==' '){
                num++;
                p--;
            }
            else break;
        }
        String ans = "";
        if(num == index && index== s.length()){
            for(int i = 0; i < index; i++) ans += ss;
        }
        else{
            int start = index;
            //利用midsize统计字符串除去开头和结尾的空格数
            int midsize = 0;
            for(int i = index; i <= p; i++){
                if(s.charAt(i) == ' '){
                    String temp = s.substring(start,i);
                    start=i+1;
                    sp[midsize++] = temp;
                }
            }
            sp[midsize++] = s.substring(start,p+1);

            //最后合并三部分
            for(int i = 0; i < index; i++) ans += ss;
            for(int i = 0; i < midsize-1; i++){
                ans += sp[i];
                ans += ss;
            }
            ans += sp[midsize-1];
            for(int i = 0; i < num; i++) ans += ss;
        }
        return ans;
    }
}
原文地址:https://www.cnblogs.com/XDU-Lakers/p/13542121.html