[LeetCode] 966. Vowel Spellchecker

题:https://leetcode.com/problems/vowel-spellchecker/

题目大意

参考原文

解题思路

1.生成 oWordSet 记录所有wordlist ,若query 属于那么返回
2.生成cWordIndexMap 。 遍历wordlist,将元素变为全小写 。将小写的元素作为key,原元素作为val,放入cWordIndexMap 中。若key已经出现,则不放入。
3.生成 vWordIndexMap。遍历wordlist将元素变为全小写,在将小写元素中的元音字符变为 *,将新生成的元素作为key,原元素作为val,放入vWordIndexMap中。若key已经出现,则不放入。
4.每个query ,依次查找上述数据集合。若都没有返回""。

class Solution {
    public String[] spellchecker(String[] wordlist, String[] queries) {
        Set<Character> vowelsSet = new HashSet<>();

        vowelsSet.add('a');
        vowelsSet.add('e');
        vowelsSet.add('i');
        vowelsSet.add('o');
        vowelsSet.add('u');

        Set<String> oWordSet = new HashSet<>();
        for(String word : wordlist)
            oWordSet.add(word);
        Map<String,String> cWordIndexMap = new HashMap<>();
        for(String word : wordlist){
            String lowerCaseWord = word.toLowerCase();
            if(!cWordIndexMap.containsKey(lowerCaseWord))
                cWordIndexMap.put(lowerCaseWord,word);
        }

        Map<String,String> vWordIndexMap = new HashMap<>();
        for(String word : wordlist){
            String lowerCaseWord = word.toLowerCase();
            StringBuilder strbuilder = new StringBuilder();
            for(char c : lowerCaseWord.toCharArray()){
                if(vowelsSet.contains(c))
                    strbuilder.append('*');
                else
                    strbuilder.append(c);
            }
            if(!cWordIndexMap.containsKey(strbuilder.toString()))
                cWordIndexMap.put(strbuilder.toString(),word);
        }

        String[] resArr =new String[queries.length];
        int i = 0;
        for(String query :queries){
            resArr[i++] = eleSpellchecker(vowelsSet,oWordSet,cWordIndexMap,vWordIndexMap,query);
        }
        return resArr;
    }

    private String eleSpellchecker(Set<Character> vowelsSet, Set<String> oWordSet, Map<String, String> cWordIndexMap, Map<String, String> vWordIndexMap, String query) {
        if(oWordSet.contains(query)){
            return query;
        }
        String lowerCaseWord = query.toLowerCase();
        if(cWordIndexMap.containsKey(lowerCaseWord))
            return cWordIndexMap.get(lowerCaseWord);

        StringBuilder strbuilder = new StringBuilder();
        for(char c : lowerCaseWord.toCharArray()){
            if(vowelsSet.contains(c))
                strbuilder.append('*');
            else
                strbuilder.append(c);
        }
        if(cWordIndexMap.containsKey(strbuilder.toString()))
            return cWordIndexMap.get(strbuilder.toString());
        return "";
    }
}

2.生成cWordIndexMap、vWordIndexMap 可以合并。使得代码更简单

class Solution {
    public String[] spellchecker(String[] wordlist, String[] queries) {
        Set<Character> vowelsSet = new HashSet<>();

        vowelsSet.add('a');
        vowelsSet.add('e');
        vowelsSet.add('i');
        vowelsSet.add('o');
        vowelsSet.add('u');

        Set<String> oWordSet = new HashSet<>();
        for(String word : wordlist)
            oWordSet.add(word);
        Map<String,String> cWordIndexMap = new HashMap<>();
        Map<String,String> vWordIndexMap = new HashMap<>();

        for(String word : wordlist){
            String lowerCaseWord = word.toLowerCase();
            if(!cWordIndexMap.containsKey(lowerCaseWord))
                cWordIndexMap.put(lowerCaseWord,word);
            StringBuilder strbuilder = new StringBuilder();
            for(char c : lowerCaseWord.toCharArray()){
                if(vowelsSet.contains(c))
                    strbuilder.append('*');
                else
                    strbuilder.append(c);
            }
            if(!cWordIndexMap.containsKey(strbuilder.toString()))
                cWordIndexMap.put(strbuilder.toString(),word);
        }

        String[] resArr =new String[queries.length];
        int i = 0;
        for(String query :queries){
            resArr[i++] = eleSpellchecker(vowelsSet,oWordSet,cWordIndexMap,vWordIndexMap,query);
        }
        return resArr;
    }

    private String eleSpellchecker(Set<Character> vowelsSet, Set<String> oWordSet, Map<String, String> cWordIndexMap, Map<String, String> vWordIndexMap, String query) {
        if(oWordSet.contains(query)){
            return query;
        }
        String lowerCaseWord = query.toLowerCase();
        if(cWordIndexMap.containsKey(lowerCaseWord))
            return cWordIndexMap.get(lowerCaseWord);

        StringBuilder strbuilder = new StringBuilder();
        for(char c : lowerCaseWord.toCharArray()){
            if(vowelsSet.contains(c))
                strbuilder.append('*');
            else
                strbuilder.append(c);
        }
        if(cWordIndexMap.containsKey(strbuilder.toString()))
            return cWordIndexMap.get(strbuilder.toString());
        return "";
    }
}

猜你喜欢

转载自blog.csdn.net/u013383813/article/details/85392553