Z „
pamięci jako ograniczenie”, wtedy nie będę nawet pójść na HashSet (który AFAIK również usunąć zduplikowane ciągi na pierwotnej liście), ponieważ będziesz z wykorzystaniem dodatkowej struktury HashSet, który zajmuje trochę pamięci.
Sortowanie również nie poprawi użycia pamięci.
Chciałbym użyć oryginalnej listy (która już istnieje, więc nie będzie używana dodatkowa pamięć) + 3-bajtowa zmienna całkowita do iteracji listy. 3 bajty można iteracyjne nad listą 2^24 = 16777216 ciągi
z „pamięci jako ograniczenie” pójdę za 2 pętle. Myślę, że pseudokod C-jak będzie łatwiej zrozumieć, że mój zwykły angielski.
Uwagi:
- Z przykład podany w pytaniu, to nie jest to faktycznie Lista ale tablicą, więc będę pracować nad strukturą, jakby to był Array
- Pytanie nie jest wyjaśnić, czy sparować "abc", "def", "cba", "abc". Będę parować pierwsze "abc" z "cba", a także, że "cba" z "drugim" abc "(intencja nie jest jasne w pytaniu)
- Zakładam, że nie możemy zmienić oryginalnej listy
Oto najmniej kod pamięci zużycie mogę myśleć:
// "list" holds the original list (array)
for (int i = 0; i < length(list) - 1; i++) {
for (int j = i + 1; j < length(list); j++) {
if (list[i] == reverse(list[j])) {
print(list[i] + " reversed is " list[j])
}
}
}
chodzi o zużycie pamięci, rozwiązanie to zajmie 2 zmiennych całkowitych (zwykle 4 bajtów każdy) + pierwotnej liście, które zakładam, że my nie można się pozbyć.
Dotyczące użycia procesora e (właściwie nie ma znaczenia na podstawie pytania), liczba powtórzeń łańcuchów będzie następująca: (N * (N + 1))/2 gdzie N jest długością listy
Na re - nie jest jasne, czy chcesz znaleźć wszystkie łańcuchy, które są rewersami innych osób na tej samej liście, czy też, biorąc pod uwagę ciąg, znaleźć ciąg na liście, który jest jego odwrotnością. Ten drugi, oczywiście, jest prostym problemem wyszukiwania, po odwróceniu podanego ciągu. –
Chociaż zgadzam się z Danielem, biorąc pod uwagę PAMIĘĆ jako ograniczenie, nie ma to żadnego znaczenia. –
@DanielRHicks Redagowałem moje pytanie .... on miał na myśli, że dla wszystkich ciągów na liście znajdź czy istnieje odwrotność tego ... –