Wpis z mikrobloga

Dzisiaj zadanie od Amazon:

Dana jest liczba k i napis s. Znajdź długość najdłuższego podłańcucha s, który składa się z najwyżej k różnych znaków.

np.:
dla s = "abcba", k = 2 wynikiem jest 3 (podłańcuch "bcb")

#dailycodingproblem #programowanie
  • 23
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@NotABigFan: chyba bym zrobił, że mam tablicę z indeksami od 'a' do 'z' z licznikiem wystąpień
dodatkowo trzymam sobie aktualną ilość różnych znaków (zwiększana, jeśli w tablicy coś się zmienia z 0 na 1, zmienjszana jeśli na 0)
tworze 2 wskaźniki i lecę po tablicy i aktualizuję tablice, jeśli k mi przekroczy limit to zwiększam mniejszy licznik, jeśli nie to ten większy
  • Odpowiedz
@NotABigFan: Na szybko (byle działało) wyszło mi coś takiego :) Jak znajdę chwilkę czasu, to napiszę to lepiej :) (musi się dać to wykonać tylko z jednym forem)

private static String getMaxSubstring(String text, int k) {
char[] str = text.toCharArray();
String s = "";
Set set =
  • Odpowiedz
@Frogof no ale zwykle w takich zadaniach jest a - z xd a przy słowniku też masz taką samą złożoność, ewentualnie ograniczoną przez n
Ale no dobra, w pewnych przypadkach słownik może zajmować mniej pamięci
  • Odpowiedz
@Frogof: @SuppressWarnings: No przecież tablica to nic innego, jak słownik z "idealnym" kluczem. ( ͡ ͜ʖ ͡)

Przy tak ograniczonym alfabecie jak a..z (a nawet niech będzie 0..255) tablica jest jedynie słusznym wyborem. Znany z góry rozmiar, błyskawiczna alokacja na stosie, zero narzutu. W słowniku będziesz zwykle miał alokację node-based, zwłaszcza w takich śmiechawych gunwojęzykach jak python. Skończy się na tym, że
  • Odpowiedz
@Frogof: Mylisz się i dorabiasz ideologię. W takich zadankach są bardzo często stosowane uproszczenia, gdzie moje wspomnienie o zakresie bajtowym w bardzo wielu miejscach już jest przesadnie ostrożne. Co najwyżej jako follow-up mogłoby się pojawić o kodowanie znaków i ew. zmianę struktury danych.

Jak życie daje Ci cytry^Wograniczenia wejścia, to wykorzystaj je do ostatka.
  • Odpowiedz