Если вы хотите улучшить время выполнения для длинных строк и / или длинных наборов исключений, вы можете попытаться воспользоваться возможностью использовать символы в качестве индексов массива и создать массив, представляющий набор символов, которые разрешены / отстранен от ваших строк.
Если вы создаете массив длиной 256, инициализируйте его равным 1 для всех элементов (кроме элемента 0, так как я думаю, что вы должны предполагать, что он всегда исключается, потому что нет способа представить его в строке исключения, потому что это строка C), а затем переберите строку набора исключений, приведя каждый символ в нем к беззнаковому (символы подписаны в некоторых системах, но они должны быть беззнаковыми, чтобы это работало) и установите байт, индексированный этим символом до 0.
В конце этого у вас есть справочная таблица, которая позволяет очень быстро определить, является ли символ концом вашей строки, и время выполнения O (n + m), а не O (n * m).