面试题 01.03. URL化

面试题 01.03. URL化open in new window 简单

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

示例 1:

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

示例 2:

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

提示:

  1. 从尾到头开始修改字符串通常最容易。
  2. 你可能需要知道空格的数量。你能数一下吗?

解答

解法一:利用 StringBuilder

public string ReplaceSpacesV2(string S, int length)
{
    StringBuilder strBuilder = new StringBuilder(length); // 初始化给了部分空间,防止后续增加空间 
    //逐渐遍历字符串
    for (int i = 0; i < length; i++)
    {
        //如果不是空格就加入到StringBuilder中,如果是空格
        //就把"%20"加入到StringBuilder中
        if (S[i] == ' ')
            strBuilder.Append("%20");
        else
            strBuilder.Append(S[i]);
    }
    return strBuilder.ToString();
}

解法二: 反向遍历替换插入数组

public string ReplaceSpaces(string S, int length)
{
    char[] chars = new char[S.Length]; // 空间肯定够用,题目中了说了足够
    int index = S.Length - 1;
    for (int i = length - 1; i >= 0; i--)
    {
        //如果遇到空格就把他转化为"%20"
        if (S[i] == ' ')
        {
            chars[index--] = '0';
            chars[index--] = '2';
            chars[index--] = '%';
        }
        else
        {
            chars[index--] = S[i];
        }
    }
    return new String(chars, index + 1, chars.Length - index - 1);
}

解法三: 内置函数一行流

public string ReplaceSpaces(string S, int length)
{
    return S.Substring(0,length).Replace(" ", "%20");
}
Contributors: FHL