单词规律

64 阅读1分钟
package org.example.leetcodeBook.hash;  
  
import java.util.HashMap;  
//单词规律  
//给定一种规律 pattern 和一个字符串 s ,判断 s 是否遵循相同的规律。  
// 这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 s  
// 中的每个非空单词之间存在着双向连接的对应规律。  
// 示例1:  
// 输入: pattern = "abba", s = "dog cat cat dog"  
// 输出: true  
  
public class WordPatternSolution {  
    public boolean wordPattern(String pattern, String s) {  
    HashMap<String, Character> str2ch = new HashMap<>();  
    HashMap<Character, String> ch2str = new HashMap<>();  
    int m=s.length();  
    int i=0;  
    for (int p = 0; p <pattern.length() ; p++) {  
        char ch=pattern.charAt(p);  
        if(i>=m)return false;  
        int j=i;  
        while (j<m && s.charAt(j)!=' ')j++;  
        String tmp=s.substring(i,j);  
        if(str2ch.containsKey(tmp) && str2ch.get(tmp)!=ch){  
            return false;  
        }  
        if(ch2str.containsKey(ch) && !tmp.equals(ch2str.get(ch))){  
            return false;  
        }  
        str2ch.put(tmp,ch);  
        ch2str.put(ch,tmp);  
        i=j+1;  
    }  
    return i>=m;  
    }  
}