Непонятные символы в "ковычках" по типу 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 шт):
Принцип "работы" было бы проще понять, если был бы приведён полный код, но в общем-то он описан во фразе:
либо путём написания символа в ковычках по типу '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
НЕ являются анаграммами.