阅读 208

思路讲解与算法实现 LeetCode - URL化

思路讲解与算法实现 LeetCode - URL化

每天一道公司算法真题,讲解解题思路与各种算法实现;欢迎大家点评或者说出你的解题想法,或评论想让我讲解哪道题!


目录

题目

解法一

解法二

上下篇

题目

URL化。编写一种方法,将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的“真实”长度。(注:用Java实现的话,请使用字符数组实现,以便直接在数组上操作。)


示例1:


输入: "Mr John Smith ", 13

输出:“Mr%20John%20Smith”

示例2:


输入:" ", 5

输出:"%20%20%20%20%20"

说明


字符串长度在 [0, 500000] 范围内。

解法一

如果借助Java API来实现,那就太简单,几行代码搞定,因为题目说假设字符串尾部有足够的空间,那表明尾部可能有空字符,所以首先我们使用substring()函数截取实际的字符串,然后再通过replace函数将空格替换为%20即可。


package com.nobody;


/**

 * @Description URL化。编写一种方法,将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的“真实”长度。

 * @Author Mr.nobody

 * @Date 2021/4/22

 * @Version 1.0

 */

public class ReplaceSpaces {


    public String replaceSpaces(String S, int length) {

        return S.substring(0, length).replace(" ", "%20");

    }

    

    public static void main(String[] args) {

        ReplaceSpaces replaceSpaces = new ReplaceSpaces();

        String s = "chen pi de Java Lib          ";

        int length = s.trim().length();

        System.out.println(replaceSpaces.replaceSpaces(s, length));

    }

}


// 输出

chen%20pi%20de%20Java%20Lib

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24



解法二

但是题目如果用Java实现的话,使用字符数组实现,而且也假设字符串尾部有足够的空间存放新增的字符,那我们可以借助原有足够的字符数组,从最尾部空间的位置往前存放每一个字符,如果是空格字符则存放%20这三个字符,否则存放原字符。最后截取尾部有效的字符数组即可。


package com.nobody;


/**

 * @Description URL化。编写一种方法,将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的“真实”长度。

 * @Author Mr.nobody

 * @Date 2021/4/22

 * @Version 1.0

 */

public class ReplaceSpaces {


    public String replaceSpaces(String S, int length) {

        // 将字符串转换为字符数组

        char[] chars = S.toCharArray();

        // 填充游标,从字符数组的末尾开始往前填充

        int fillIndex = chars.length - 1;

        for (int i = length - 1; i >= 0; i--) {

            if (' ' == chars[i]) {

                chars[fillIndex--] = '0';

                chars[fillIndex--] = '2';

                chars[fillIndex--] = '%';

            } else {

                chars[fillIndex--] = chars[i];

            }

        }

        // 截取最后有效的字符数组返回

        return new String(chars, fillIndex + 1, chars.length - 1 - fillIndex);

    }


    public static void main(String[] args) {

        ReplaceSpaces replaceSpaces = new ReplaceSpaces();

        String s = "chen pi de Java Lib          ";

        int length = s.trim().length();

        System.out.println(replaceSpaces.replaceSpaces(s, length));

    }

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35


————————————————

版权声明:本文为CSDN博主「陈皮的JavaLib」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/chenlixiao007/article/details/116035073


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐