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);
}
};