Kelime Deseni

Jan 01 2023
Günün Leetcode Sorunu [ 01 Ocak 2023 ]
Bir örüntü ve s dizisi verildiğinde, s'nin aynı örüntüyü takip edip etmediğini bulun. Burada takip, tam eşleşme anlamına gelir, öyle ki kalıptaki bir harf ile s'deki boş olmayan bir kelime arasında bir eşleştirme vardır.

a patternve string verildiğinde , aynı kalıbı izleyip izlemediğini sbulun .s

Burada takip , tam eşleşme anlamına gelir, öyle ki bir in harfi ile boş olmayanpattern bir kelime arasında bir eşleştirme vardır .s

Örnek 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

bildiğimiz gibi

“abba” -> “köpek kedi kedi köpek”

'a' -> “köpek”

'b' -> “kedi”

farklı bir dizeye sahip bir haritayla karşılaşırsak, bunun geçerli bir test durumu olmadığını söyleyebiliriz.

“abfa” -> “köpek kedi köpek köpek”

Leet kodu#290. Kelime Deseni

'a' -> “köpek”

'b' -> “kedi”

'f' -> “köpek”

ancak köpek zaten a'ya atanmıştır. Bu nedenle, biri a -> dog ile eşleme yapacak ve başka bir harita dog -> a ile eşleme yapacak iki harita kullanıyoruz, böylece köpeğin zaten başka bir karakterle eşlendiğini biliyoruz.

Kodu başlatalım

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