@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
@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 =
@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
@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
@Demolicjon: @SuppressWarnings: no to teraz taka tablice dla unicoda zaalokuj:) przy ograniczonym tak, ale tu nie jest ograniczony. Szczególnie w kontekście o jakim pisze @NotABigFan (rozmowy w dużych, dobrych firmach) zrobienie takiego upraszczajacego założenia to błąd.
@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.
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
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
private static String getMaxSubstring(String text, int k) {
char[] str = text.toCharArray();
String s = "";
Set set =
private static String getMaxSubstring2(String text, int k) {
char[] str = text.toCharArray();
String s = "";
int from
Ale no dobra, w pewnych przypadkach słownik może zajmować mniej pamięci
Przy tak ograniczonym alfabecie jak
a..z
(a nawet niech będzie0..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, żeJak życie daje Ci cytry^Wograniczenia wejścia, to wykorzystaj je do ostatka.