替换空格---剑指Offer

替换空格

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


解题思路:

  1. 查找到所有空格的位置
  2. 将空格替换成相应的字符串

提供API说明:

indexOf(String str ,int fromIndex):

  • 参数:
    • str - 要搜索的子字符串。
    • fromIndex - 开始搜索的索引位置。
      返回:
      指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。

substring(index beginIndex ,int endIndex):

  • 参数:
    • beginIndex - 起始索引(包括)。
    • endIndex - 结束索引(不包括)。
  • 返回:
    • 指定的子字符串。
  • 抛出:
    • IndexOutOfBoundsException - 如果 beginIndex 为负,或 endIndex 大于此 String 对象的长度,或 beginIndex 大于 endIndex。

代码如下:

public class Solution {
    public String replaceSpace(StringBuffer str) {
        //所要的结果集
        String result = new String();
        //子串裁剪从0开始
        int start = 0;
        int end;
        //API的indexOf函数,返回值给end
        //如果,end不是-1,则说明后面还可能存在空格字符
        //否则,说明此次start到字符末尾已经没有空格字符
        while((end=str.indexOf(" ", start))!=-1){
            //API的substring函数,对返回值进行处理
            result = result + str.substring(start, end) + "%20";
            //start之前的部分已经处理完毕,下次处理从end+1开始索引查找空格字符
            start = end+1;
        }
        //考虑边界条件:需要加上最后一次没有找到空格字符剩余的子串
        return result + str.substring(start);
    }
}

在源字符串长度为n,替换字符串长度为m的情况下:
最坏空间复杂度为O(n*m)
如果indexOf()函数的复杂度总和为O(n),并且substring函数的复杂度为O(1)则:
最坏时间复杂度为O(n)
(以上如有错误,还望大神指教)

猜你喜欢

转载自blog.csdn.net/qq_37340753/article/details/80719707
今日推荐