def word_pattern(pattern,s):
words=s.split()
if len(pattern)!=len(words): return False
return len(set(zip(pattern,words)))==len(set(pattern))==len(set(words))
public boolean wordPattern(String pattern,String s){
String[] words=s.split(" ");
if(pattern.length()!=words.length) return false;
Map<Character,String> cs=new HashMap<>();
Map<String,Character> sc=new HashMap<>();
for(int i=0;i<pattern.length();i++){
char c=pattern.charAt(i); String w=words[i];
if(cs.containsKey(c)&&!cs.get(c).equals(w)) return false;
if(sc.containsKey(w)&&sc.get(w)!=c) return false;
cs.put(c,w); sc.put(w,c);
} return true;
}
Python set+zip elegant. Java needs explicit bidirectional maps.
def word_pattern(pattern,s):
words=s.split()
if len(pattern)!=len(words): return False
return len(set(zip(pattern,words)))==len(set(pattern))==len(set(words))
public boolean wordPattern(String pattern,String s){
String[] words=s.split(" ");
if(pattern.length()!=words.length) return false;
Map<Character,String> cs=new HashMap<>();
Map<String,Character> sc=new HashMap<>();
for(int i=0;i<pattern.length();i++){
char c=pattern.charAt(i); String w=words[i];
if(cs.containsKey(c)&&!cs.get(c).equals(w)) return false;
if(sc.containsKey(w)&&sc.get(w)!=c) return false;
cs.put(c,w); sc.put(w,c);
} return true;
}
1. Split words 2. Check bijection