LeetCode简单题:290. 单词规律(Python,C++,Java)

一.解法

https://leetcode-cn.com/problems/word-pattern/
要点:hashmap
Python,C++,Java都用了相同的哈希表法。
用hashmap对vector<string>arr和string pattern进行来回两次哈希映射(string映射char以及char映射string),如果都没问题说明单词规律一样。
注意:需要用到split函数,C++中没有split函数需要自己手动写。

二.Python实现

class Solution:
    def wordPattern(self, pattern: str, str: str) -> bool:
        mp={}
        pm={}
        wordList=str.split(' ')
        
        if len(pattern)!=len(wordList):
            return False
        
        for i in range(len(pattern)):
            if pm.get(pattern[i]):
                if pm[pattern[i]]!=wordList[i]:
                    return False
            else:
                pm[pattern[i]]=wordList[i]
            
            if mp.get(wordList[i]):
                if mp[wordList[i]]!=pattern[i]:
                    return False
            else:
                mp[wordList[i]]=pattern[i]

        return True

三.C++实现

class Solution {
public:
    bool wordPattern(string pattern, string str) {
        unordered_map<char,string> mp;
        unordered_map<string,char> pm;
        int j=0;
        vector<string>arr;
        for(int i=0;i<str.size();++i){
            if(i==str.size()-1){
                arr.push_back(str.substr(j,str.size()-j));
            }
            if(str[i]==' '){
                arr.push_back(str.substr(j,i-j));
                j=i+1;
            }
        }

        if(pattern.size()!=arr.size()) return false;
        int length=pattern.size();

        for(int i=0;i<length;i++){
            if(mp.find(pattern[i])!=mp.end()&&mp[pattern[i]]!=arr[i]) return false;
            if(pm.find(arr[i])!=pm.end()&&pm[arr[i]]!=pattern[i]) return false;
            mp[pattern[i]]=arr[i];
            pm[arr[i]]=pattern[i];
        }

        return true;
      
    }
};

四.java实现

class Solution {
    public boolean wordPattern(String pattern, String str) {
        Map<Character, String> map = new HashMap<Character, String>();
        Map<String, Character> map2 = new HashMap<String, Character>();
        String[] strs = str.split(" ");
        char[] cs = pattern.toCharArray();

        if(cs.length != strs.length) return false;

        for(int i = 0; i < cs.length;i++){
            if(map.containsKey(cs[i])){
                if(!map.get(cs[i]).equals(strs[i])) return false;
               
            }
            else{ map.put(cs[i],strs[i]);}

            if(map2.containsKey(strs[i])){
                if(!map2.get(strs[i]).equals(cs[i])) return false;
                
            }
            else{map2.put(strs[i],cs[i]);}
        }
        return true;
       
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容