Образец слова

Jan 01 2023
Проблема дня Leetcode [ 01 января 2023 ]
Учитывая шаблон и строку s, найти, следует ли s тому же шаблону. Здесь follow означает полное совпадение, такое, что существует биекция между буквой в шаблоне и непустым словом в s.

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

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

Пример 1:

Input: pattern = "abba", s = "dog cat cat dog"
Output: true

Input: pattern = "abba", s = "dog cat cat fish"
Output: false

Input: pattern = "aaaa", s = "dog cat cat dog"
Output: false

Как мы знаем, что

«абба» -> «собака кошка кошка собака»

'а' -> «собака»

'б' -> «кошка»

если мы встретим карту с другой строкой, мы можем сказать, что это недопустимый тестовый пример.

«абфа» -> «собака-кошка-собака»

Литкод#290. Образец слова

'а' -> «собака»

'б' -> «кошка»

'ф' -> "собака"

но собака уже закреплена за a. Таким образом, мы используем две карты: одна будет делать сопоставление с собакой ->, а другая — с собакой -> a, чтобы мы знали, что собака уже сопоставлена ​​с другим персонажем.

Давайте начнем код

class Solution {
    public boolean wordPattern(String pattern, String s) {
        String[] tokens = s.split(" ");
        
        if(pattern.length() != tokens.length) 
            return false;

        HashMap<String, Character> map = new HashMap<>();
        HashMap<Character, String> reverseMap = new HashMap<>();

        for(int i=0;i<tokens.length;i++) {
            String find = tokens[i];
            char pt = pattern.charAt(i);
            
            if(!map.containsKey(find))
                map.put(find, pt);
            if(!reverseMap.containsKey(pt))
                reverseMap.put(pt, find);

            char mapPt = map.get(find);
            String mapStr = reverseMap.get(pt);
            
            if(mapPt != pt)
                return false;
            if(!mapStr.equals(find))
                return false;
        }
        return true;
    }
}