Patrón de palabras

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.
Inserte la descripción de la imagen aquí

Análisis:

La idea de usar una tabla hash.

Primero pensemos y analicemos:
Inserte la descripción de la imagen aquí
Entonces la idea es:
Inserte la descripción de la imagen aquí
Por ejemplo:
Inserte la descripción de la imagen aquí

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.

Supongo que te gusta

Origin blog.csdn.net/weixin_42120561/article/details/114497441
Recomendado
Clasificación