与えられた文字列(古典的なインタビューの質問)から重複を取り除くタスクがありますが、これは少し異なります。最終結果は最小の辞書順その他。たとえば、cbacdcbc => acdb, bcabc => abc
となります。私はSOのいくつかの関連する問題を見ましたが、答えを見つけることができませんでした。最小の辞書順を維持しながら重複する文字を削除する方法
編集:ここでは、これまでに(正常に動作していない)私のコードです:
public static String removeDuplicateCharsAlphbetically(String str) {
int len = str.length();
if (len<2) return str;
char[] letters = str.toCharArray();
int[] counts = new int[26];
for (char c : letters) {
counts[c-97]++;
}
StringBuilder sb = new StringBuilder();
for (int i=0;i<len-1;i++) {
if (letters[i]==letters[i+1]) continue;
if (counts[letters[i]-97]==1) {
sb.append(letters[i]);
} else if (counts[letters[i]-97] != 0) {
if (letters[i]<letters[i+1] && counts[letters[i]-97] == 1) {
sb.append(letters[i]);
counts[letters[i]-97]=0;
} else {
counts[letters[i]-97]--;
}
}
}
return sb.toString();
}
EDIT2:私は質問以前のリンクを入れていないため申し訳ありません。ここではlink:
なぜPythonがタグ付けされていますか? –
私はPythonまたはJava – Humoyun
のいずれかで解決策が必要です。*最小の辞書順ではどういう意味ですか? **ただ一つの**辞書順です。最初の例で '' b''の前に '' c ''が来るのはなぜですか? –