Сайт: https://easyoffer.ru/
Все каналы: t.me/+xGeAw6ckJ4liYzQy
Контакт для рекламы: @sendme_ads
Post #991
127
Задача: №44. Wildcard Matching
Сложность: hard
Учитывая входную строку
-
-
Соответствие должно охватывать всю строку
Пример:
👨💻 Алгоритм:
1⃣Использовать два указателя
2⃣Если символы совпадают или
3⃣Если встречаем
😎 Решение:
Ставь 👍 и забирай 📚 Базу знаний
Сложность: hard
Учитывая входную строку
s и шаблон p, реализуйте сопоставление с поддержкой ? и *, где: -
? соответствует любому отдельному символу. -
* соответствует любой последовательности символов (включая пустую). Соответствие должно охватывать всю строку
s (не частичное). Пример:
Input: s = "aa", p = "a*"
Output: true
👨💻 Алгоритм:
1⃣Использовать два указателя
sdx и pdx для строки s и шаблона p. 2⃣Если символы совпадают или
?, двигаем оба указателя. 3⃣Если встречаем
*, запоминаем позиции в s и p, продолжаем проверку. 😎 Решение:
class Solution {
typealias C = Character
func isMatch(_ s: String, _ p: String) -> Bool {
var sArray = Array(s)
var pArray = Array(p)
var sdx = 0, pdx = 0
var starPDx = -1, starSDx = -1
while sdx < sArray.count {
if pdx < pArray.count && (sArray[sdx] == pArray[pdx] || pArray[pdx] == C("?")) {
sdx += 1
pdx += 1
} else if pdx < pArray.count && pArray[pdx] == C("*") {
starPDx = pdx
starSDx = sdx
pdx += 1
} else if starPDx == -1 {
return false
} else {
sdx = starSDx + 1
pdx = starPDx + 1
starSDx = sdx
}
}
return pdx < pArray.count ? !pArray[pdx...].contains(where: { $0 != C("*") }) : true
}
}Ставь 👍 и забирай 📚 Базу знаний

