Wortmuster

Jan 01 2023
Leetcode-Problem des Tages [ 01 Jan 2023 ]
Bei einem gegebenen Muster und einer Zeichenfolge s finden Sie heraus, ob s demselben Muster folgt. Folgen bedeutet hier eine vollständige Übereinstimmung, sodass es eine Bijektion zwischen einem Buchstaben in Muster und einem nicht leeren Wort in s gibt.

Wenn a patternund eine Zeichenfolge gegeben ssind, folgt find if sdem gleichen Muster.

Hier folgen bedeutet eine vollständige Übereinstimmung, so dass es eine Bijektion zwischen einem Buchstaben in patternund einem nicht leeren Wort in gibt s.

Beispiel 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

Wie wir das kennen

„abba“ -> „Hund Katze Katze Hund“

'a' -> "Hund"

'b' -> "Katze"

Wenn wir auf eine Map mit einer anderen Zeichenfolge stoßen, können wir sagen, dass es sich nicht um einen gültigen Testfall handelt.

„abfa“ -> „Hund Katze Hund Hund“

Leetcode#290. Wortmuster

'a' -> "Hund"

'b' -> "Katze"

'f' -> "Hund"

aber der Hund ist bereits a zugeordnet. Also verwenden wir zwei Maps, eine macht Mapping mit einem -> Hund und eine andere Map macht Mapping mit Hund -> a, damit wir wissen, dass der Hund bereits mit einem anderen Charakter gemappt wird.

Beginnen wir mit dem 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;
    }
}