Добавить в корзинуПозвонить
Найти в Дзене
Skill Up In IT

290. Word Pattern

#String#Hash Table Даны a pattern и строка s, найдите, s следует ли она тому же шаблону. Здесь follow означает полное совпадение, такое, что существует биекция между буквой в pattern и непустым словом в s. В частности: Пример 1: Ввод: шаблон = "abba", s = "dog cat cat dog" Вывод: true Объяснение: Биекцию можно установить следующим образом: Пример 2: Ввод: шаблон = "abba", s = "dog cat cat fish" Вывод: false Пример 3: Ввод: шаблон = "aaaa", s = "dog cat cat dog" Вывод: false Ограничения: Пример решения на go func wordPattern(pattern string, s string) bool {
ws := strings.Split(s, " ")
if len(ws) != len(pattern) {
return false
}
d1 := map[rune]string{}
d2 := map[string]rune{}
for i, a := range pattern {
b := ws[i]
if v, ok := d1[a]; ok && v != b {
return false
}
if v, ok := d2[b]; ok && v != a {
return false
}
d1[a] = b
d2[b] = a
}
return true }

#String#Hash Table

Даны a pattern и строка s, найдите, s следует ли она тому же шаблону.

Здесь follow означает полное совпадение, такое, что существует биекция между буквой в pattern и непустым словом в s. В частности:

  • Каждая буква в pattern соответствует ровно одному уникальному слову в s.
  • Каждое уникальное слово в s соответствует ровно одной букве в pattern.
  • Никакие две буквы не соответствуют одному и тому же слову, и никакие два слова не соответствуют одной и той же букве.

Пример 1:

Ввод: шаблон = "abba", s = "dog cat cat dog"

Вывод: true

Объяснение:

Биекцию можно установить следующим образом:

  • 'a' maps to "dog".
  • 'b' maps to "cat".

Пример 2:

Ввод: шаблон = "abba", s = "dog cat cat fish"

Вывод: false

Пример 3:

Ввод: шаблон = "aaaa", s = "dog cat cat dog"

Вывод: false

Ограничения:

  • 1 <= pattern.length <= 300
  • pattern содержит только строчные английские буквы.
  • 1 <= s.length <= 3000
  • s содержит только строчные английские буквы и пробелы ' '.
  • s не содержит начальных или конечных пробелов.
  • Все слова s разделены одним пробелом .

Пример решения на go

func wordPattern(pattern string, s string) bool {

ws := strings.Split(s, " ")
if len(ws) != len(pattern) {
return false
}

d1 := map[rune]string{}
d2 := map[string]rune{}

for i, a := range pattern {

b := ws[i]

if v, ok := d1[a]; ok && v != b {
return false
}

if v, ok := d2[b]; ok && v != a {
return false
}

d1[a] = b
d2[b] = a

}

return true
}