Количество действительных подстроковJAVA

Программисты JAVA общаются здесь
Anonymous
Количество действительных подстроков

Сообщение Anonymous »


Учитывая входная строка, содержит буквы от 'a' to 'g' < /p>
count, сколько подстроков существует во входной строке, такая, что
частота любого символа внутри подстроения не больше, чем
abaa, присутствующая в подстроении. /> Объяснение: Допустимые комбинации: < /p>
a b a a ab ba ba aba baa. Подход с раздвижным окном, но заметил, что с раздвижным окном, когда мы движемся вперед по левому индексу, мы упускаем, чтобы подсчитать некоторые достоверные подстроки с более высокой длиной.

Код: Выделить всё

public class Main {
public static int solve(String str) {
int n = str.length();
int[] freq = new int[7]; // Frequency array for 'a' to 'g'
int left = 0, right = 0, distinct = 0, count = 0;

while (right < n) {
int rightChar = str.charAt(right) - 'a';
if (freq[rightChar] == 0) distinct++; // New character in window
freq[rightChar]++;

// Ensure all character frequencies  distinct) {
int leftChar = str.charAt(left) - 'a';
freq[leftChar]--;
if (freq[leftChar] == 0) distinct--; // Removed a distinct character
left++;
}

// Count valid substrings ending at `right`
//System.out.println(left+":"+right);
//count += (right - left + 1);
right++;
}

return count;
}

public static void main(String[] args) {
System.out.println(solve("abaa"));  // Output: 8
System.out.println(solve("abab"));  // Output: 10
System.out.println(solve("aacd"));  // Output: 9

}

}
У меня есть другая идея о создании всех возможных подстроков, а также использования Hashmap, которая хранит частоту каждого символа, а затем проверка того, являются ли они действительными или нет, которые требуют o (n n k) сложности времени, где n - это размер входной строки, k - это число, поддерживаемые SLAHMAP. Подход с оконным подходом, но понял, что это не правильный способ решить проблему.>

Подробнее здесь: https://stackoverflow.com/questions/795 ... substrings

Вернуться в «JAVA»