1. Demanda
- Dada una regla
pattern
y una cadenastr
, juzguestr
si debe seguir la misma regla; - Seguir aquí se refiere a la coincidencia completa. Por ejemplo, hay una conexión bidireccional entre
pattern
cada letra de la cadenastr
y cada palabra que no está vacía en la cadena .
Ejemplo 1:
输入: pattern = "abba", str = "dog cat cat dog" 输出: true
Ejemplo 2:
输入:pattern = "abba", str = "dog cat cat fish" 输出: false
Explicación:
puede suponer quepattern
solo se incluyen letras minúsculas, incluidas letras minúsculasstr
separadas por un solo espacio.
En segundo lugar, la tabla hash
2.1 Análisis de pensamiento
- La idea de esta pregunta es consistente con el algoritmo de optimización de la tabla hash en cadenas isomorfas : https://blog.csdn.net/Sruggle/article/details/114001098 ;
- Es decir, el carácter es la clave y la palabra es el valor. Si una de las dos condiciones es verdadera, será falsa: ①No hay ningún carácter actual en la tabla hash, pero hay un mapeo del carácter actual; ②Hay es un carácter actual en la tabla hash, pero su mapeo es la palabra actual diferente;
2.2 Implementación del código
class Solution {
public boolean wordPattern(String pattern, String s) {
String[] words = s.split(" ");
if(pattern.length() != words.length) {
return false;
}
Map<Character, String> map = new HashMap<>();
for(int i = 0; i < pattern.length(); i++) {
char c = pattern.charAt(i);
String word = words[i];
if(!map.containsKey(c)) {
//不包括字符,却存在其映射单词
if(map.containsValue(word)) {
return false;
}
map.put(c, word);
} else {
//包括字符,其映射与存储的值不相同
if(!map.get(c).equals(word)) {
return false;
}
}
}
return true;
}
}
2.3 Análisis de complejidad
- La complejidad del tiempo es O (N);
- La complejidad del espacio es O (N);