Wzór słowa
Jan 01 2023
Leetcode Problem dnia [ 01 stycznia 2023 ]
Biorąc pod uwagę wzór i łańcuch s, znajdź, czy s ma ten sam wzór. Tutaj follow oznacza pełne dopasowanie, takie, że istnieje bijekcja między literą we wzorcu a niepustym słowem w s.
Biorąc pod uwagę a patterni string s, znajdź if spodąża za tym samym wzorcem.
Tutaj follow oznacza pełne dopasowanie, takie, że istnieje bijekcja między literą w patterni niepustym słowem w s.
Przykład 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
Skoro to wiemy
„abba” -> „pies kot kot pies”
„a” -> „pies”
„b” -> „kot”
jeśli napotkamy mapę z innym ciągiem, możemy powiedzieć, że nie jest to prawidłowy przypadek testowy.
„abfa” -> „pies kot pies pies”
„a” -> „pies”
„b” -> „kot”
„f” -> „pies”
ale pies jest już przypisany do a. Używamy więc dwóch map, jedna zrobi mapowanie z -> psem, a druga mapa zrobi mapowanie z psem -> a, abyśmy wiedzieli, że pies jest już mapowany z inną postacią.
Zacznijmy od kodu
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;
}
}

![Czym w ogóle jest lista połączona? [Część 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































