【LeetCode】把字符串 s 中的每个空格替换成““%20””day02

时间:2022-07-23
本文章向大家介绍【LeetCode】把字符串 s 中的每个空格替换成““%20””day02,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

题目

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

 

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

解答过程

  • 当我看到这道题的第一个思路是:将这个String按空格Split开。然后重新拼接的时候加上需要替换的字符串。(我也不知道这是什么脑回路); 最后还是一道错题。
/**
     * 第一次的解答。
     * 为多个孔空字符串就会出现err
     *
     * @param s
     * @return
     */
    public String replaceSpace(String s) {
        if (s == null || s.equals("")) {
            return "";
        }

        StringBuffer resultStr = new StringBuffer("");
        String[] strs = s.split(" ");
        for (int i = 0; i < strs.length; i++) {
            resultStr.append(strs[i]);
            // 防止最后一个字符里面添加需要替换的字符
            if (i != strs.length - 1) {
                resultStr.append("%20");
            }

        }
        return resultStr.toString();
    }
  • 第二次 我看答案了,String 类里有一个工具方法,我靠!!!!! str.replace(" “,”%20"),好吧。
  • 其中得复杂度是下面是replace的源码,我们可大概看看也就是O(n)的时间复杂度。
str.replace(" ", "%20");
public String replaceAll(String replacement) {
        reset();
        boolean result = find();
        if (result) {
            StringBuffer sb = new StringBuffer();
            do {
                appendReplacement(sb, replacement);
                result = find();
            } while (result);
            appendTail(sb);
            return sb.toString();
        }
        return text.toString();
    }
  • 第三次。再仔细想想,String的底层是char[],那我们把它变为一个char数组,那处理起来不就So easy!空格他也是一个char. 上代码:
/**
     * 第二次
     * 首先我们得明确Sting的里面也就是一个char类型数组时间复杂度是O(n)
     *
     */
    public static String replaceSpaceV2(String s) {
        if (s.length() == 0) {
            return "";
        }
        //此处为什么使用StringBuffer呢?因为他比String占用的内存少
        StringBuffer resultStr = new StringBuffer("");
        //需要知道这个toCharArray这个方法。
        char[] c = s.toCharArray();
        for (int i = 0; i < s.length(); i++) {
        //这块由于我不知道如何判断char类型的空格等于才这样写,浪费了空间和时间
        //    char c1 = c[i];
        //    String str = c1 + "";
         //   if (" ".equals(str)) {
        //不经常使用char类型,看看下面的操作 ' ' 和" "得区别是什么?淋漓尽致的被体现了。
         if(' ' == char[i]){
                resultStr.append("%20");
            } else {
                resultStr.append(s.charAt(i));
            }
        }
        return resultStr.toString();
    }

总结

  • 这个题真的是需要注意的就是你得知道String的底层数据结构是char[]
  • str.charArray()将String 转化为char[],如果你知道replace()这个方法,在没有题目限制的情况下,那也是可以使用的
  • 还有就是char的空格之间的比较。使用单引号和char比较,双引号和String比较。

参考

原题地址:https://leetcode-cn.com/problems/ti-huan-kong-ge-lcof/