Cracking the Coding Interview を読み始めたところです。解決してから回答を確認した後の問題の1つ(具体的には1.4)は、それがどのように行われるかについて質問し、何かを欠落していないかどうかを確認するためにここに投稿することにしました。
ここに問題があります:
文字列内のすべてのスペースを '%20'で置き換えるメソッドを記述します。文字列の末尾に追加の文字を保持するのに十分なスペースがあり、文字列の「真」の長さが与えられていると想定できます。 (注:Javaで実装する場合は、この操作を適切に実行できるように文字配列を使用してください。)
例:入力 "Mr John Smith"、13出力 "Mr%20John%20Smith"
著者のソリューション:
public void replaceSpaces(char[] str, int length)
{
int spaceCount = 0, newLength, i;
for(i=0; i<length; i++)
{
if (str[i] == '')
{
spaceCount++;
}
}
// ...
}
残りは私の質問には無関係なので、私は...を入れました。
spaceCount
を見つけるためにループする必要があるのは、(str.length - length) / 2
?
あなたが投稿した定義は言う:
文字列の末尾に、追加の文字を保持するために十分なスペースがあると想定できます。
そして:
文字列の末尾には、追加の文字を保持するのに十分な十分なスペースがあると想定できます。
コードインタビューのレッスン1は、read(または聞く)仕様を注意深く行うことです配列の長さが100万である可能性は十分にありますが、文字列には2つのスペースしか含まれていません。この場合、2つの長さを差し引くことができると想定することで、明示的ではない仕様の一部を(検証せずに)想定しているため、ほぼ確実にその点が失われます。
spaceCount
ループは、文字列内のすべてのactualスペースをカウントし、末尾のスペースを無視します( _length
パラメータの文字列の実際の長さから末尾のスペースを引いたもの)。
仕様では、文字列の末尾に残っているスペースの量が、追加の文字を保持するために必要なスペースと正確に一致するとは記載されていません。 十分なスペースがあります。