Modello di parole

Jan 01 2023
Leetcode problema del giorno [ 01 gen 2023 ]
Dato uno schema e una stringa s, trova se s segue lo stesso schema. Qui seguire significa una corrispondenza completa, tale che c'è una biiezione tra una lettera nello schema e una parola non vuota in s.

Dati a patterne string s, trova se ssegue lo stesso schema.

Qui seguire significa una corrispondenza completa, tale che c'è una biiezione tra una lettera in patterne una parola non vuotas in .

Esempio 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

Come lo sappiamo

“abba” -> “cane gatto gatto cane”

'a' -> "cane"

'b' -> "gatto"

se incontriamo una mappa con una stringa diversa allora possiamo dire che non è un caso di test valido.

“abfa” -> “cane gatto cane cane”

CodiceLeet#290. Modello di parole

'a' -> "cane"

'b' -> "gatto"

'f' -> "cane"

ma il cane è già assegnato ad a. Quindi usiamo due mappe, una eseguirà la mappatura con a -> dog e un'altra mappa eseguirà la mappatura con dog -> a in modo da sapere che il cane è già stato mappato con un altro personaggio.

Iniziamo il codice

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;
    }
}