รูปแบบคำ
Jan 01 2023
ปัญหา Leetcode ประจำวันนี้ [ 01 ม.ค. 2023 ]
กำหนดรูปแบบและสตริง s ให้ค้นหาว่า s เป็นไปตามรูปแบบเดียวกันหรือไม่ ต่อไปนี้หมายถึงการจับคู่แบบเต็ม เช่นมี bijection ระหว่างตัวอักษรในรูปแบบและคำที่ไม่ว่างเปล่าใน s
กำหนด a patternและ สตริงsค้นหาว่าsเป็นไปตามรูปแบบเดียวกันหรือไม่
ใน ที่นี้followหมายถึงการจับคู่ทั้งหมด เช่น มี bijection ระหว่างตัวอักษร in patternและคำที่ไม่เว้นsว่างใน
ตัวอย่างที่ 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
อย่างที่เราทราบกันดีว่า
“แอบบ้า” -> “หมาแมวแมวหมา”
'a' -> "สุนัข"
'b' -> "แมว"
หากเราพบแผนที่ที่มีสตริงอื่น เราสามารถพูดได้ว่าไม่ใช่กรณีทดสอบที่ถูกต้อง
“abfa” -> “หมาแมวหมาหมา”
'a' -> "สุนัข"
'b' -> "แมว"
'f' -> "สุนัข"
แต่สุนัขได้รับมอบหมายให้เป็น ดังนั้นเราจึงใช้สองแผนที่ แผนที่หนึ่งจะทำแผนที่กับ a -> dog และอีกแผนที่หนึ่งจะทำแผนที่กับ dog -> a เพื่อให้เรารู้ว่าสุนัขกำลังถูกจับคู่กับตัวละครอื่นอยู่แล้ว
มาเริ่มโค้ดกันเลย
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;
}
}





































![รายการที่เชื่อมโยงคืออะไร? [ส่วนที่ 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)