Можно ли написать JS-регулярку, которая матчит строку только если в строке четное количество вхождений какого-либо символа?

Доброго дня.

Можно ли написать регулярку, которая при вызове Regexp.test(string) вернет true только тогда, если в string четное количество каких-либо символов? Пытаюсь решить задачку на litcode, но пока пришел к выводу, что она нерешаема, т.к. в регулярках нет возможности "сохранить" количество сматченных вхождений.

Например, 11a2aa - false, 3 буквы a; 2aa4 - true, 2 буквы а

Подскажите, пожалуйста, в сторону какого алгоритма копать и можно ли так сделать только регуляркой.
  • Вопрос задан
  • 228 просмотров
Решения вопроса 1
@dodo512
^([^a]*a[^a]*a)+[^a]*$
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Sozdavan
Невозможно написать регулярное выражение, которое будет возвращать истину только в том случае, если в строке есть четное количество любых символов, используя только регулярные выражения, потому что регулярные выражения не имеют возможности «запоминать» количество совпадающих вхождений. Одним из возможных подходов к решению этой проблемы было бы использование комбинации регулярных выражений и языка программирования. Вы можете использовать регулярное выражение для сопоставления интересующих вас символов, а затем использовать язык программирования для подсчета количества вхождений этих символов и проверки их четности. Другим возможным подходом может быть использование другого алгоритма, такого как подсчет количества вхождений каждого символа в строку, а затем проверка четности числа для каждого символа. Этот подход может быть реализован с использованием цикла и структуры данных словаря на большинстве языков программирования. Наконец, вы можете использовать другой язык со встроенной функцией для этой проблемы, например, python с его функцией Counter(), он даст вам диктовку с количеством каждого символа в строке.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы