プログラマーインタビューゴールデンクラシック-インタビューの質問01.03.URL

1.トピックの紹介

URL化。文字列内のすべてのスペースを%20に置き換えるメソッドを記述します。文字列の最後には新しい文字を格納するのに十分なスペースがあり、文字列の「実際の」長さがわかっていると想定されます。(注:Javaで実装されている場合は、文字配列の実装を使用して、配列を直接操作できるようにしてください。)

例1:

 入力: "Mr John Smith"、13
 出力: "Mr%20John%20Smith"
例2:

 入力: ""、5
 出力: "%20%20%20%20%20"
プロンプト:

文字列の長さは[0、500000]の範囲です。

出典:LeetCode
リンク:https ://leetcode-cn.com/problems/string-to-url-lcci
著作権はLeetCodeが所有しています商用の再版については、公式の承認に連絡してください。非商用の再版については、出典を示してください。

2つの問題解決のアイデア

文字列内のスペースを検出し、それらを%20に置き換えます。文字列を使用してこの質問を完了する場合、文字列の長さが増加し続けるため、文字列オブジェクトのデフォルトのスペースサイズを超えると、ストレージスペースの再配布とコピーにより、比較的大きなオーバーヘッド発生しますそのため、ストレージスペースの再配布やコピーの問題を回避するために、事前に固定長のメモリを動的に申請するために、追加のメモリを申請する方法が採用されています。

3つの問題解決コード

方法一:
class Solution {
public:
    string replaceSpaces(string S, int length) {
        //字符串存储空间的再分配和复制开销比较大
        string str;
        for(int i = 0; i < length; ++i)
        {
            if(S[i] == ' ')
                str += "%20";
            else
                str += S[i];
        }
        return str;
    }
};

方法二:
class Solution {
public:
    string replaceSpaces(string S, int length) {
        //最大3 * length + 1
        char *arr = new char[3*length + 1];
        int j = 0;
        for(int i = 0; i < length; ++i)
        {
            if(S[i] == ' ')
            {
                arr[j++] = '%';
                arr[j++] = '2';
                arr[j++] = '0';
            }
            else
                arr[j++] = S[i];
        }
        arr[j] = '\0';
        return string(arr);
    }
};

4つの問題解決の結果

おすすめ

転載: blog.csdn.net/qq_39661206/article/details/105576985