Непонятные символы в "ковычках" по типу char_counts[t.charAt(i) - 'a']

при выполнении разных заданий по java, часто натыкаюсь на решения других людей где они используют условия фильтрации/добавления/удаления чего либо путём написания символа в ковычках по типу 'a' для отслеживания индекса буквы по алфавиту . Я не могу найти как это называется и отсюда не могу изучить принцип работы и найти хоть какую то информацию по этому поводу. вот пример кода в котором я это увидел: Задание с анаграмами

for (int i = 0; i < s.length(); i++) {
            char_counts[s.charAt(i) - 'a']++; //Находит индекс буквы в массиве и добовляет туда +1 в данном случае.
            char_counts[t.charAt(i) - 'a']--; //Находит индекс буквы в массиве и отнимает там -1 в данном случае.

Вопрос в целом такой, как это называется? и где можно посмотреть информацию по этим штукам?


Ответы (1 шт):

Автор решения: Nowhere Man

Принцип "работы" было бы проще понять, если был бы приведён полный код, но в общем-то он описан во фразе:

либо путём написания символа в ковычках по типу 'a' для отслеживания индекса буквы по алфавиту

В данном случае, в одинарных кавычках записывается английский символ 'a', который вычитается из символа, записанного в строках s и t, чтобы получить корректный индекс в массиве char_counts, назначение которого -- хранить частоты символов в указанных строках.
То есть, конкретно в данной задаче должно быть условие, что строки s, t содержат только строчные английские буквы от 'a' до 'z', и соответственно для корректного вычисления индекса в массиве char_counts для заданной буквы потребуется отнять смещение 'a': 'a' - 'a' -> 0, 'b' - 'a' -> 1, ... 'z' - 'a' -> 25.
Также подразумевается, что строка t НЕ короче строки s.

Такой способ применяется как правило в учебных задачах с ограниченными наборами данных, так как для других символов (хотя бы цифр или прописных букв) индекс будет вычислен неправильно, что приведёт к исключению ArrayIndexOutOfBoundsException.

Таким образом, в представленном цикле частоты символов из строки s плюсуются, а из строки t -- минусуются. Затем проверяется, что было записано в результате в массиве частот char_counts: если найдено хотя бы одно ненулевое значение, строки s и t НЕ являются анаграммами.

→ Ссылка