Tema:
Dado un patrón y una cadena str, juzgue si str sigue la misma regla.
Seguir aquí se refiere a la coincidencia completa. Por ejemplo, hay una conexión bidireccional entre cada letra en el patrón y cada palabra no vacía en la cadena str.
Análisis:
La idea de usar una tabla hash.
Primero pensemos y analicemos:
Entonces la idea es:
Por ejemplo:
Código:
class Solution {
public boolean wordPattern(String pattern, String s) {
Map<String, Character> word_map = new HashMap<String, Character>(); //单词到pattern字符的映射
int[] used=new int[128]; //已被映射的pattern字符
String word="";//保存临时的pattern字符
int pos=0; //当前指向的pattern字符
s=s+" "; //s尾部增加一个空格,以便遇到空格拆分单词
for(int i=0;i<s.length();i++){
if(s.charAt(i)==' '){
//遇到空格,即拆分出一个单词
if(pos==pattern.length()){
//若分割出一个单词,却无pattern字符对应
return false;
}
if(word_map.get(word) == null){
//单词未出现在哈希映射中
if(used[pattern.charAt(pos)]!= 0){
//如果当前pattern字符已使用
return false;
}
word_map.put(word, pattern.charAt(pos));
// word_map[word]=pattern.charAt(pos);
used[pattern.charAt(pos)]=1;
}else{
if(word_map.get(word)!=pattern.charAt(pos)){
//若当前word已建立映射,无法与当前pattern对应
return false;
}
}
word=""; //完成一个单词的插入和查询后,清空word
pos++;
}else{
word+=s.charAt(i);
}
}
if(pos!=pattern.length()){
//还有多余的pattern字符
return false;
}
return true;
}
}
Fuente: LeetCode
Enlace: https://leetcode-cn.com/problems/word-pattern
Copyright es propiedad de LeetCode . Para reimpresiones comerciales, comuníquese con la autorización oficial. Para reimpresiones no comerciales, indique la fuente.