Этот вопрос был задан недавно во время собеседования, и я не смог его решить, поэтому мне нужно несколько предложений, как я могу решить эту проблему
Заявление: я не могу использовать REGEX или любые встроенные библиотеки
***** Постановка задачи выглядит следующим образом: *********
** совпадений Входные данные: текст (строка), запрос (строка) Выходные данные: true, если вы можете найти соответствие длязапрос в тексте, в противном случае - false. Если специальных символов нет, в большинстве языков есть метод contains, который просто сделает это.Один специальный символ: «?»-- Если ты найдешь '?'в строке запроса он указывает, что предыдущий символ является необязательным (соответствует 0 или 1 раз).
Примеры:
- Нет вопросительных знаков:
- совпадений ("hello World", "hello") возвращает true
- совпадений ("hello World", "world") возвращает false
- совпадений ("hello World", "o W") возвращает true
- совпадений ("hello World", "W o") возвращает false
- совпадений ("hello World", "h W") возвращает false
- с вопросительными знаками -- "Я?"означает «необязательный l»:
- совпадений («heo World», «hel? o») возвращает истину
- совпадений («helo World», «hel? o») возвращает истинные совпадения ("hello World", "hel? o") возвращает false
- Убедитесь, что вы понимаете этот случай:
- match ("hello World", "hell? lo") возвращает true
- У вас может быть несколько знаков вопроса:
- совпадений («Привет, мир», «ex? Llo Worlds?») Возвращает значение true
***** Мой подход был таким, как показано ниже. *********
public class StringPatternMatch
{
public static bool MatchPattern(string inputText, string pattern)
{
int count = 0; int patternIndex = 0;
for (var i = 0; i < inputText.Length; i++)
{
if (patternIndex > pattern.Length)
break;
if (inputText[i] == pattern[patternIndex] ||
(inputText[i] != pattern[patternIndex] && pattern[patternIndex + 1] == '?'))
count++;
patternIndex++;
}
return pattern.Length == count;
}
}
пересекают обе строки с одной стороны на другую (скажем, от крайнего правого символа к крайнему левому).Если мы находим соответствующий символ, мы продвигаемся вперед в обеих строках с увеличивающимся счетчиком для шаблона - в конце счетчика совпадений с шаблоном-длиной
Также я предоставил свой код, но он не охватывает все случаи
Конечно, я не пошел в следующий раунд, но я все еще думаю об этой проблеме и не нашел точного решения - надеюсь увидеть некоторые интересные ответы!