mẫu từ

Jan 01 2023
Vấn đề Leetcode của ngày [ 01 Jan 2023 ]
Cho một mẫu và một chuỗi s, tìm xem s có theo cùng một mẫu không. Ở đây, follow có nghĩa là khớp hoàn toàn, sao cho có sự trùng lặp giữa một chữ cái trong mẫu và một từ không trống trong s.

Cho a patternvà a string s, hãy tìm nếu stheo cùng một mẫu.

Ở đây, follow có nghĩa là khớp hoàn toàn, sao cho có sự trùng lặp giữa một chữ cái trong patternvà một từ không trống trong s.

Ví dụ 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

Như chúng ta biết rằng

“abba” -> “chó mèo mèo chó”

'a' -> “chó”

'b' -> “mèo”

nếu chúng ta gặp một bản đồ với một chuỗi khác thì chúng ta có thể nói rằng đó không phải là một trường hợp thử nghiệm hợp lệ.

“abfa” -> “chó mèo chó chó”

Leetcode#290. mẫu từ

'a' -> “chó”

'b' -> “mèo”

'f' -> “chó”

nhưng con chó đã được gán cho a. Vì vậy, chúng tôi sử dụng hai bản đồ, một bản đồ sẽ thực hiện ánh xạ với -> con chó và một bản đồ khác sẽ thực hiện ánh xạ với con chó -> a để chúng tôi biết con chó đã được ánh xạ với một ký tự khác.

Hãy bắt đầu viết 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;
    }
}