ラファエル・ゴンサルベス:
私は、文字列を受信して、隣接する重複を削除する関数を記述する必要があります。
例:
入力- > "aabbaabbcccaaa"
出力- > "ababca"
次のように私はそれを解決しようとしました。
public String remdups(String input) {
String response = "";
char temp;
int i, length = input.length();
for(i = 0; i < length; i++) {
temp = input.charAt(i);
response += temp;
while(i < length && input.charAt(i) == temp) i++;
}
return response;
}
しかし、それはそうです、時間の複雑さが期待されていないようことを、どのように私はもパフォーマンスを向上させることができたり、より良いアプローチがどうなりますか?私はそれが本当に簡単な問題だけど、私は改善する方法や、それを行うための別の方法を見つけることができません。
JBX:
私にはあなたのコードは、ビューの複雑さの点から、すでによさそうです。それは一度だけ文字列を通過しています。あなたができる最適化は応答にあるString
使用してStringBuilder
、そして多分ちょうど読みやすくするためにループを少し簡略化していない(2つのネストされたループの必要性を、そしてインクリメントi
2ヶ所からのカウンターは、ミスを導入する可能性)。
public String remdups(String input) {
StringBuilder response = new StringBuilder(input.length());
char temp;
for (int i = 0; i < input.length(); i++) {
char next = input.charAt(i);
if (temp != next) {
temp = next;
response.append(temp);
}
}
return response.toString();
}