Modèle de mot

Jan 01 2023
Problème Leetcode du jour [ 01 janv. 2023 ]
Étant donné un motif et une chaîne s, trouver si s suit le même motif. Ici, suivre signifie une correspondance complète, telle qu'il y a une bijection entre une lettre dans le motif et un mot non vide dans s.

Étant donné a patternet a string s, trouvez si ssuit le même modèle.

Ici , suivre signifie une correspondance complète, telle qu'il y a une bijection entre une lettre dans patternet un mot non vides dans .

Exemple 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

Comme nous savons que

"abba" -> "chien chat chat chien"

'a' -> "chien"

'b' -> "chat"

si nous rencontrons une carte avec une chaîne différente, nous pouvons dire que ce n'est pas un cas de test valide.

"abfa" -> "chien chat chien chien"

Leetcode#290. Modèle de mot

'a' -> "chien"

'b' -> "chat"

'f' -> "chien"

mais le chien est déjà assigné à a. Nous utilisons donc deux cartes, l'une fera la cartographie avec un -> chien et une autre carte fera la cartographie avec un chien -> a afin que nous sachions que le chien est déjà mappé avec un autre personnage.

Commençons le code

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