У меня есть это упражнение, которое нужно решить в java, и речь идет о некоторых манипуляциях со строками, для которых я понятия не имею, как их решать. Мне было бы более интересно узнать, какой подход следует использовать для его решения, а не предлагать полное решение для кодирования. Итак, вот оно:
Строки с длинными блоками повторяющихся символов занимают намного меньше места, если хранятся в сжатом представлении. Чтобы получить сжатое представление, мы заменяем каждый сегмент одинаковых символов в строке на количество символов в сегменте, за которым следует символ (например, мы заменяем сегмент "CCCC" на 4 C). Чтобы избежать увеличения размера, мы оставляем однобуквенные сегменты без изменений (сжатое представление «B C» - это та же строка - «B C»). Например, сжатое представление строки «ABBBCCDD CCC» является «A3B2C2D3 C», а сжатое представление строки «AAAAAAAAAAABXXAAAAAAAAAA» - «11AB2X10A». Обратите внимание, что во втором примере, если мы удалим сегмент «BXX» из середины слова, мы получим гораздо более короткое сжатое представление - «21A». Чтобы воспользоваться этим наблюдением, мы решили изменить алгоритм сжатия. Теперь перед сжатием мы удаляем ровно K последовательных букв из входной строки. Мы хотели бы знать кратчайшую сжатую форму, которую мы можем сгенерировать таким образом.
Напишите функцию:
class Solution {
public int solution(String S, int K) {
}
}
, которая задана строкой S длины N и целым числом K, возвращает кратчайшая возможная длина сжатого представления S после удаления ровно K последовательных символов из S.
Пример:
С учетом S = "AAAAAAAAAAABXXAAAAAAAAAA" и K = 3, функция должна вернуть 3, поскольку после удаления «BXX» из S мы остаемся с «AAAAAAAAAAAAAAAAAAAAA», который сжимается до представления длины 3 - «21A».
Требование:
N is an integer within the range [1...100,000];
K is an integer within the range [0...100,000];
K <= N;
string S consists only of uppercase letters (A-Z)