あなたが入力文字列を与えていると仮定しますk
文字を使用して、一般的にします。<=と文字列をトリミング2つの文字
0
A
答えて
1
私はあなたがO(n)
時にその場でこれを行うことができると思います。あなたが処理している単語の先頭にポインタを置いて、文字列を繰り返します。単語の長さがk
より大きい場合は、文字列の先頭をこの単語で上書きします。最良の答えは言語に依存することになるだろう
void modify(char *s, int k){
int n = strlen(s);
int j = 0, cnt = 0, r = 0, prev = -1;
s[n++] = ' '; // Setinel to avoid special case
for(int i=0; i<n; i++){
if(s[i] == ' '){
if (cnt > k){
if(r > 0) s[r++] = ' ';
while(j < i) s[r++] = s[j++];
}
cnt = 0;
}
else {
if (prev == ' ') j = i;
cnt++;
}
prev = s[i];
}
s[r] = '\0';
}
int main(){
char s[] = "my name is vikas";
modify(s, 2);
printf("%s\n", s);
}
1
文字列の現在の位置と "現在の単語"を保持し、現在のすべての単語を長さ> = kで累積し、累積された単語から文字列を再構成しますか?
このアルゴリズムは書き換えインプレース使用し、要素間のコピーの数最小限に抑えること:何
input
.Split(' ')
.Where(s => s.Length > k)
.Aggregate(new StringBuilder(), (sb, s) => sb.Append(s))
.ToString()
:そのようなことで十分であろうが(時間計算量が最適である、私は推測)
final int k = 2;
char[] test = " my name is el jenso ".toCharArray();
int l = test.length;
int pos = 0;
int cwPos = 0;
int copyPos = 0;
while (pos < l)
{
if (Character.isWhitespace(test[pos]))
{
int r = pos - cwPos;
if (r - 1 < k)
{
copyPos -= r;
cwPos = ++pos;
}
else
{
cwPos = ++pos;
test[copyPos++] = ' ';
}
}
else
{
test[copyPos++] = test[pos++];
}
}
System.out.println(new String(test, 0, copyPos));
0
を空間の複雑さについて?もちろん、これはO(k)で実行できます(入力と出力のサイズを数えることはできません)。 Splitは実際の配列を作るので、.NETではそうはなりません。しかし、代わりにイテレータを構築することができます。そして文字列が文字の反復子であると想像すれば、O(1)アルゴリズムになります。
0
" "
によってsplit()
とif length() <= 2
1
"a short sentence of words" split ' ' filter {_.length > 2} mkString " "
(スカラ)を省略
関連する問題
- 1. 文字列のトリミング
- 2. 文字列トリミングと分割
- 3. トリミング後に2つの文字列値を比較します
- 4. 文字列と2文字
- 5. は、私は、次の2つの文字列持つ文字列
- 6. perlの2つの文字列とハイライト不一致文字
- 7. PSオブジェクトの文字列のトリミング
- 8. 2つの文字列(テキストファイル)
- 9. 2文字列と親文字列の間の文字列を取得する
- 10. C#で文字列をトリミングする
- 11. C#短い文字列のトリミング
- 12. のJava 8の変換リスト<地図<文字列、文字列>マップする<文字列、地図<文字列、文字列>>
- 13. 文字の右側のトリミング
- 14. 文字列2文字間の文字列の抽出
- 15. 辞書のモデル<文字列、文字列>と戻る
- 16. マスク文字列を持つ文字列
- 17. 部分文字列から始まる文字列をトリミングする方法
- 18. 文字列値に基づいてJava文字列をトリミングしますか?
- 19. grepで2文字間の文字列を見つける
- 20. Regex - 2つの文字列の間の文字列を見つけるPHP
- 21. は、私は2つの文字の間にある文字列を削除したい2つの文字
- 22. 大文字と小文字の2つの選択文
- 23. 文字列が2文字に満たない文字列
- 24. 2つの特殊文字の間の文字列
- 25. 2つの文字列の共通文字の数
- 26. 2つの文字列の同じ順序の文字セット
- 27. 2つの文字列を比較し、文字とその文字の文字数を含むリストを文字列に作成
- 28. StringDictionaryと辞書<文字列、文字列>
- 29. 2つの文字列が同じ文字で
- 30. グループ日付<辞書<文字列、文字列>>
:ここではCのコードでは、(それが各単語をスペースでexaclyによって分離されていることを前提として)です。言語にとらわれないほどのものではありません。 – marcog
@Colin [宿題タグを追加するために質問を編集しないでください。疑いの余地があるなら、それをそのまま残すことが最善です。代わりに、最初に、質問者が状況を明らかにするように要請するコメントを追加してください。](http://meta.stackexchange.com/questions/10811/how-to-ask-and-answer-homework-questions) – marcog
@marcog:それは本当に宿題の質問ではありません。この質問は私が気付いたときに私が気づいたときに、あるフォーラムに質問をしたときに、アドレスバーにリンクを張るのに適した文字列をトリムするので、私はそのアプローチについて考え始めました。質問。 – Vikas