Что ж, удаление элементов из коллекции во время цикла по ней - плохая идея, потому что это может привести к неправильной логике при изменении индекса.
Просто поместите какой-то особый случай, например, «baaana», ваше решение легко потерпит неудачу, потому что когда вы пытаетесь найти «a» в индексе 2, вы удаляете его и пропускаете сравнение с «фактическим» индексом 3, потому что его индекс уменьшается до 2 после удаления ,
И еще одна вещь, которую вы должны знать. В Java String является неизменным, это означает, что когда вы изменяете строку, вы фактически присваиваете переменную с новой. Таким образом, эти функции должны возвращать новую строку вместо изменения ввода.
С этим типом проблемы, я предлагаю вам использовать хеш-тип данных для запоминания отдельных элементов, чтобы вы могли решить это с O (n) сложностью по времени.
public static String removeDuplicate(String s) {
StringBuilder sb = new StringBuilder();
Set<Character> metChars = new HashSet<>();
for(int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if(!metChars.contains(c)) {
sb.append(c);
metChars.add(c);
}
}
return sb.toString();
}