zoukankan      html  css  js  c++  java
  • 剑指 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;
        }
    }
    
  • 相关阅读:
    Dirichlet Process 和 Dirichlet Process Mixture模型
    也说说EM
    Seven Steps to Success Machine Learning in Practice
    matlab norm 范式
    nginx中时间的管理
    Android中解析网络请求的URL
    jsp if else c标签 总结
    Android开发系列之button事件的4种写法
    oracle中split的使用
    Unix C++(boost) 线程同步和线程组
  • 原文地址:https://www.cnblogs.com/XDU-Lakers/p/13542121.html
Copyright © 2011-2022 走看看