Мне задали этот вопрос в телефонном интервью для летней стажировки, и я попытался придумать решение сложности n * m (хотя и не совсем точное) на Java.
У меня есть функция, которая принимает 2 строки, предположим, "общие" и "CMN". Он должен возвращать True, основываясь на том факте, что «c», «m», «n» встречаются в том же порядке в «общем». Но если бы аргументы были «общие» и «омн», он вернул бы «Ложь», потому что, хотя они встречаются в одном и том же порядке, но «м» также появляется после «о» (что не соответствует условию сопоставления с образцом)
Я работал над этим, используя Hashmaps и Ascii, но пока не получил убедительного решения! Из того, что я читал до сих пор, это может быть связано с алгоритмами Бойера-Мура или Левенштейна?
Надеясь на передышку в стеке! :)
Редактировать : в некоторых ответах говорится об уменьшении длины слова или создании хэш-набора. Но, насколько я понимаю, этот вопрос не может быть решен с помощью хэш-наборов, потому что вхождение / повторение каждого символа в первой строке имеет свое значение. Условия PASS - «con», «cmn», «cm», «cn», «mn», «on», «co». Сбой при условии, что может показаться иначе - «com», «omn», «mon», «om». Это FALSE / FAIL, потому что «o» встречается как до, так и после «m». Другой пример - "google", "ole" будет PASS, но "google", "gol" потерпит неудачу, потому что "o" также появляется перед "g"!