Возьмем строку «abbashbhqa». Мы должны удалить дубликаты символов таким образом, чтобы выход был «abshq». Одним из возможных решений является проверка каждого символа с другими присутствующими в строке и последующим манипулированием. Но для этого требуется сложность времени O (n^2). Есть ли оптимизированный подход для этого?Алгоритм для удаления повторяющихся символов из строки
ответ
O (N):
определить массив L [26] из Булев. Установите для всех значение ЛОЖЬ. Построить новую пустую строку
Пройдите по строке и для каждой буквы проверьте, является ли L [x] ЛОЖНЫМ. Если это так, добавьте x в новую строку и установите L [x] равным 1.
Скопируйте новую строку в старую.
как только вы повторяете строку, вы создаете набор (или набор хэшей). в случае, если алфавит ограничен (английские буквы, как в вашем примере), вы можете создать 256 булевых массивов и использовать ASCII-код в качестве ключа к нему. Сделать все булевы ложными в начальной точке. На каждой итерации вы проверяете, является ли массив [] ложным или истинным. Если это неверно, символ не является дубликатом, поэтому вы помещаете его в массив [] = true, не удаляете из строки и продолжаете. в случае, если это правда - это символ дубликат
Вероятно, это будет реализация вышеуказанной проблемы
import java.util.*;
import java.io.*;
public class String_Duplicate_Removal
{
public static String duplicate_removal(String s)
{
if(s.length()<2)
return s;
else if(s.length()==2)
{
if(s.charAt(0)==s.charAt(1))
s = Character.toString(s.charAt(0));
return s;
}
boolean [] arr = new boolean[26];
for(int i=0;i<s.length();i++)
{
if(arr[s.charAt(i)-'a']==false)
arr[s.charAt(i)-'a']=true;
else
{
s= ((new StringBuilder(s)).deleteCharAt(i)).toString();
i--;
}
}
return s;
}
public static void main(String [] args)
{
String s = "abbashbhqa";
System.out.println(duplicate_removal(s));
}
}
Я решения с помощью Python и работает в O (N) времени и O (N) пространства - Я использую множество() как установлено, не допускает дубликатов --- В этом случае изменяется порядок элементов - Если вы хотите, чтобы заказ оставался таким же, вы можете использовать OrderedDict(), а также работает в O (n) времени -
def remove_duplicates(s , ans_set):
for i in s: # O(n)
ans_set.add(i) # O(1)
ans = ''
for char in ans_set:
ans += char
print ans
s = raw_input()
ans_set = set()
remove_duplicates(s , ans_set)
from collections import OrderedDict
def remove_duplicates_maintain_order(a):
ans_dict = OrderedDict()
for i in a: # O(n)
ans_dict[i] = ans_dict.get(i , 0) + 1 # O(1)
ans = ''
for char in ans_dict:
ans += char
print ans
s = raw_input()
remove_duplicates_maintain_order(s)
- 1. Алгоритм для удаления повторяющихся символов в Java
- 2. Метод удаления повторяющихся символов из строки (Java)
- 3. В java самый эффективный способ удаления повторяющихся символов из строки?
- 4. Удаление повторяющихся символов из строки
- 5. Удаление повторяющихся символов из строки
- 6. Regex для удаления всех повторяющихся символов
- 7. Удаление нескольких повторяющихся символов из строки
- 8. Количество непрерывных повторяющихся символов из строки
- 9. Удаление повторяющихся или дублирующих символов из строки
- 10. Python: поиск строки для переменных повторяющихся символов
- 11. Алгоритм: эффективный способ удаления повторяющихся целых чисел из массива
- 12. Regex для удаления повторяющихся букв
- 13. функция удаления повторяющихся символов в строке
- 14. Java regex для удаления повторяющихся подстрок из строки
- 15. Функция удаления повторяющихся символов из строки частично работает со смежными символами
- 16. Код для удаления повторяющихся строк
- 17. Регулярное выражение для строки, сделанной только из повторяющихся символов
- 18. удаление символов из строки - алгоритм javascript
- 19. Эффективный алгоритм поиска для поиска повторяющихся строк
- 20. Сжатие строк для повторяющихся символов
- 21. Способы удаления определенных символов из строки?
- 22. Возможности удаления двух символов из строки, чтобы получить уникальные значения
- 23. XSL для удаления повторяющихся записей
- 24. Crosstab для удаления повторяющихся строк
- 25. Каков наилучший способ удаления повторяющихся параметров URI из строки?
- 26. Совпадение повторяющихся символов из множества
- 27. Создание строки повторяющихся символов и кеширования?
- 28. Регулярное выражение для удаления начальных и конечных символов из строки?
- 29. команда оболочки для удаления диапазона символов из строки
- 30. Использование PowerShell для удаления случайной строки символов из имен файлов
Добавить в таблицу поиска (это отбросит повторы), сохранить e заказ. Вывод в порядке первого появления. –
Попробуйте прокомментировать до downvoting. –
@Boris Можете ли вы объяснить, что такое таблица поиска? –