leetcode 290. 单词规律(待研究)

【题目】290. 单词规律

给定一种规律 pattern 和一个字符串 str ,判断 str 是否遵循相同的规律。
这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应规律。

示例1:

输入: pattern = "abba", str = "dog cat cat dog"
输出: true

示例 2:

输入:pattern = "abba", str = "dog cat cat fish"
输出: false

示例 3:

输入: pattern = "aaaa", str = "dog cat cat dog"
输出: false

示例 4:

输入: pattern = "abba", str = "dog dog dog dog"
输出: false

说明:你可以假设 pattern 只包含小写字母, str 包含了由单个空格分隔的小写字母。

【解题思路1】哈希表

class Solution {
    public boolean wordPattern(String pattern, String str) {
        String[] arr=str.split(" ");
        if(pattern.length()!=arr.length) return false;
        // 将a-dog作为key-value映射到hash表中
        Map<Character,String> hashmap=new HashMap<>();
        int num=0;
        for(int i=0;i<arr.length;i++){
            // 如果键不存在,那就加入到hash表中
            if(!(hashmap.containsKey(pattern.charAt(i)))){
                // 但值得注意的情况是 键不存在,但值存在,这就错了,
                if(hashmap.containsValue(arr[i])) return false;
                hashmap.put(pattern.charAt(i),arr[i]);
            }else{
                // 键存在的情况下,如果该键对应的值不能与当前值匹配的话,那也错了
                if(!hashmap.get(pattern.charAt(i)).equals(arr[i])) return false;
            }
        }
        return true;
    }
}

【解题思路2】indexOf函数

class Solution {
    public boolean wordPattern(String pattern, String str) {
        String[] words = str.split(" "); //根据空格提取字符串
        int len = pattern.length();
        if(len != words.length) return false;
        for(int i = 0; i < len; i++){
            char a = pattern.charAt(i);
            String b = words[i];
            if(pattern.indexOf(a) != indexOfWords(words,b))
                return false;
        }
        return true;
    }
    private int indexOfWords(String[] a, String b) {
        for(int i = 0; i < a.length; i++)
            if(a[i].equals(b))  return i;
        return -1;
    }
}
//另一种写法
class Solution {
    public boolean wordPattern(String pattern, String str) {
        String[] arr = str.split(" ");
        if (pattern.length() != arr.length) return false;
        int len = pattern.length();
        for (int i = 0; i < len; i++) {
            if(pattern.indexOf(pattern.charAt(i)) != indexOf(arr, arr[i])){
                return false;
            }
        }
        return true;        
    };
    
    public static int indexOf(String[] arrays, String searchString) {
        int ans = -1;
        for(int i = 0; i < arrays.length; i++) {
            if (arrays[i].equals(searchString)) {
                ans = i;
                break;
            };
        };
        return ans;
    }
}
发布了175 篇原创文章 · 获赞 135 · 访问量 17万+

猜你喜欢

转载自blog.csdn.net/XunCiy/article/details/105373430
今日推荐