算法题

[算法题]URL化

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

示例1:

 输入:"Mr John Smith    ", 13
 输出:"Mr%20John%20Smith"

示例2:

 输入:"               ", 5
 输出:"%20%20%20%20%20"

提示:

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

思路

思路1:遍历字符串替换

题目中将空格字符转化为"%20",长度由1增加到3,则最大情况为字符串中“真实”长度的字符全部为空格,即length*3

建立length*3长度的数组,通过charAt遍历字符串每个字符,若为空格字符则将%20放入数组,若不为空格字符则将其放入数组,通过j++控制存放位置。

最后通过String.valueOf(str,0,j)控制输出字符串长度。

思路2:库函数

利用String提供的函数,获取“真实”长度子串,再将空格字符替换为%20

解答

思路1:遍历字符串替换

class Solution {
    public String replaceSpaces(String S, int length) {
        char[] str=new char[length*3];
        char a;
        int j=0;
        for(int i=0;i<length;i++){
            a=S.charAt(i);
            if(a==' '){
                str[j++]='%';
                str[j++]='2';
                str[j++]='0';
            }
            else{
                str[j++]=a;
            }
        }
        return String.valueOf(str,0,j);
    }
}

image-20200910202444483

思路2:库函数

class Solution {
    public String replaceSpaces(String S, int length) {
        return S.substring(0, length).replace(" ", "%20");
    }
}

image-20200910202332958

知识点

  • String.substring(int beginIndex, int endIndex) 返回字符串的子字符串。

    • beginIndex — 起始索引(包括), 索引从 0 开始。
    • endIndex — 结束索引(不包括)。
  • String.replace(char oldChar,char newChar) 用 newChar 字符替换字符串中出现的所有 oldChar 字符,并返回替换后的新字符串。

    • oldChar — 原字符
    • newChar — 新字符

[Link][https://leetcode-cn.com/problems/string-to-url-lcci/ ]

Leave a Reply

邮箱地址不会被公开。 必填项已用*标注