Я не смог четко сформулировать вопрос. Но тем не менее вот:
Например, я имею строку "синхрофазотрон" и подстроку "схрон". Функция должна вернуть 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);
}
Комментариев нет:
Отправить комментарий