Wpis z mikrobloga

@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 = new HashSet<>();
int from = 0;
int count = 0;
int finalSize = 0;
for (int i = 0; i < str.length; i++) {
  • Odpowiedz
@NotABigFan: Powinno być trochę lepiej :)

private static String getMaxSubstring2(String text, int k) {
char[] str = text.toCharArray();
String s = "";
int from = 0;
int counter = k+1;
Set set = new HashSet<>();

for (int i = 0; i < str.length; i++) {
if(i+counter>str.length){
break;
}
String[] c = text.substring(i, i + counter).split("");
set.addAll(Arrays.asList(c));
if (set.size() <= k) {
from = i;
counter += 1;
i=i-1;
}
set.clear();
}
  • 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 po ~10-12
  • 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