算法——剑指 Offer 05. 替换空格


请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
示例:
输入:s = "We are happy."
输出:"We%20are%20happy."

复制代码
package com.xiao.algorithms;


/**
 * 请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
 * 示例:
 *      输入:s = "We are happy."
 *      输出:"We%20are%20happy."
 */
public class Offer05_Replace_the_blank_space {
    public static String replaceSpace(String s){
        StringBuilder res = new StringBuilder();
        for(Character c : s.toCharArray()){
            if(c == ' ') {
                res.append("%20");
            } else{
                res.append(c);
            }
        }
        return res.toString();
    }

    public static void main(String[] args) {
        String s = "We are happy!";
        String s1 = replaceSpace(s);
        System.out.println(s1);

        StringBuilder str1 = new StringBuilder();
        str1.append("我");
        str1.append("拿高薪");
        System.out.println(str1);

        //将StringBuilder实例转化为字符串
        String s2 = str1.toString();

        //判断数据类型
        System.out.println(String.class.isInstance(s)); //true;
        System.out.println(String.class.isInstance(str1)); //false;
        System.out.println(String.class.isInstance(s2)); //false;


    }
}
复制代码

时间复杂度 O(N)O(N) : 遍历使用 O(N)O(N) ,每轮添加(修改)字符操作使用 O(1)O(1) ;
空间复杂度 O(N)O(N) : Python 新建的 list 和 Java 新建的 StringBuilder 都使用了线性大小的额外空间。

 

拓展:

1、StringBuilder: 一个可变的字符序列。(https://www.runoob.com/manual/jdk11api/java.base/java/lang/StringBuilder.html)
在做字符串拼接的时候,因为字符串是引用类型,新的字符串是会再内存中创建的,所以用+号拼接字符串是比较耗效率的. StringBuilder类就可以提高性能。
StringBuilder上的主要操作是append和insert方法
append() //添加新字符串到StringBuilder实例的末尾
insert()
toString() //将StringBuilder实例转化为字符串
StringBuilder实例不适合多线程使用。 如果需要这样的同步,则建议使用StringBuffer 。

2、toCharArray(): 该方法的作用是返回一个字符数组,该字符数组中存放了当前字符串中的所有字符

3、Character: Character类在对象中包装基本类型char的值。 类型为Character的对象包含单个字段,其类型为char 。
Character是char的包装类,就像Integer和int ,以及Long和long一样。
Character是char的包装类,注意它是一个类,提供了很多方法的。
包装类和基本类型可以自动转换,这是jdk1.5(5.0)的新特性,叫做 自动封箱 和 自动解封

复制代码

char ch='a';

Character ch1=ch;//自动封箱

Character c=new Character(a);

char c1=c;//自动解封
复制代码

复制代码

int t=10;

Integer t1=t;//自动封箱

Integer t=new Integer(10);
int t1=t//自动解封
复制代码

 


posted @   bob1024  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示