Страницы

Поиск по вопросам

понедельник, 8 июля 2019 г.

Как проверить, имеется ли подстрока в строке

Я не смог четко сформулировать вопрос. Но тем не менее вот:
Например, я имею строку "синхрофазотрон" и подстроку "схрон". Функция должна вернуть true, так как данную подстроку можно получить, если пропускать некоторые символы. Суть в том, что нужно сохранить очередность, подстроки хранятся в массиве строк. Есть ли в Java встроенные функции, которые смогут это сделать? У меня была идея, преобразовать подстроку в регулярное выражение, что-то типа "с*х*р*о*н" и использовать matches()
UPD:
По поводу регулярных выражений. Преобразование строки в регулярное выражение и использовать matches() не так уж и трудно реализовать. Но что если у тебя массив подстрок насчитывает больше сотни тысяч элементов, и некоторые из них могут достигать в длине 20 символов?


Ответ

Вроде простой же алгоритм. Идем по символам искомой подпоследовательности и пытаемся найти первый такой символ в основном слове. Если находим, продолжаем поиск следующего символа подпоследовательности, но уже с позиции <предыдущий найденный символ + 1>. И так пока либо не сможем найти очередной символ искомой подпоследовательности в слове, либо пока не дойдем алгоритмом до конца.
@Test public void ttt(){ String sfzt = "синхрофазотрон"; String shron = "схрон";
int lastPos = 0; boolean found = true; for(char a : shron.toCharArray()){ int pos = sfzt.indexOf(a, lastPos); if(pos == -1){ found = false; break; } lastPos = pos + 1; } System.out.println(found); }

Комментариев нет:

Отправить комментарий