剑指Offer:面试题05. 替换空格

题目

请实现一个函数,把字符串 s 中的每个空格替换成"%20"。

示例 1:

输入:s = "We are happy." 输出:"We%20are%20happy."

限制:

0 <= s 的长度 <= 10000

要点

  • 如果是直接从头查找,找到后替换,但是会挤到后面的元素,导致部分挪动,时间复杂度为`O(n^2)``
  • 可以先计算替换后的整体长度,然后从后往前处理数据,避免了挤到其他元素,时间复杂度为`O(n)``

代码

public String replaceSpace(String s) {
        if(s.length()==0){
            return s;
        }
        int spaceCount=0;
        for (int i = 0; i < s.length(); i++) {
            if(' '==(s.charAt(i))){
                spaceCount++;
            }
        }
        int k=s.length()+spaceCount*2-1;
        char[] arr=new char[k+1];
        for (int i = s.length()-1; i >=0 ; i--) {
            if(' '==(s.charAt(i))){
                arr[k--]='0';
                arr[k--]='2';
                arr[k--]='%';
            }else{
                arr[k--]=s.charAt(i);
            }
        }
        return new String(arr);
    }


查看原文:http://yuyy.info/%e7%ae%97%e6%b3%95%e8%ae%ad%e7%bb%83/%e5%89%91%e6%8c%87offer%e9%9d%a2%e8%af%95%e9%a2%9805-%e6%9b%bf%e6%8d%a2%e7%a9%ba%e6%a0%bc/
posted @ 2020-06-02 09:28  Yuyy114  阅读(138)  评论(0编辑  收藏  举报