image.png

解决思路

Map

这个解法主要是找字符和字符串的映射关系:

先以split分隔str得到字符串数组s
如果pattern中的字符个数和数组s.length不相等,说明无法一一对应,返回false
当pattern.charAt(i)还没有对应的字符串时,判断s[i]是否已经与其他字符构建了映射关系,是则返回false,否则与s[i]构建映射
当pattern.charAt(i)有对应的字符串时,判断是否与s[i]相等,不相等则返回false
遍历完pattern,说明一一对应,返回true

/

  1. class Solution {
  2. public boolean wordPattern(String pattern, String str) {
  3. String[] s = str.split(" "); //以空格分隔str
  4. if(s.length != pattern.length()) return false; //如果没有全部成对的映射则返回false
  5. Map<Character, String> map = new HashMap<>(); //存放映射
  6. for(int i = 0; i < pattern.length(); i++){
  7. if(!map.containsKey(pattern.charAt(i))){ //1. 没有映射时执行
  8. if(map.containsValue(s[i])) return false; //2. 没有映射的情况下s[i]已被使用,则不匹配返回false
  9. map.put(pattern.charAt(i), s[i]); //3. 构建映射
  10. }else{
  11. if(!map.get(pattern.charAt(i)).equals(s[i])) return false; //当前字符串与映射不匹配,返回false
  12. }
  13. }
  14. return true;
  15. }
  16. }