暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

LeetCode-500-键盘行

明日之X 2021-10-07
145

键盘行

题目描述:给你一个字符串数组 words
,只返回可以使用在 美式键盘 同一行的字母打印出来的单词。

示例说明请见LeetCode官网。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/keyboard-row/
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解法一:遍历字符

首先,如果wordsnull或者words为空数组,则直接返回空数组,就是没有符合条件的单词。

否则,首先初始化一个MapcharacterMap用于保存行数和对应行所有的字符,然后遍历words中的单词word

  • 首先获取word中的第一个字符为firstCharacter,根据characterMap判断第一个字符firstCharacter在哪一行并记录rowNum

  • 然后,判断word后面的字符是否都在第rowNum行,如果不是,则跳过处理下一个单词;如果是,则把单词添加到结果集里面。

最后返回结果集中的单词。

import java.util.*;

/**
 * @Author: ck
 * @Date: 2021/10/3 10:47 上午
 */

public class LeetCode_500 {
    private static final Map<Integer, Set<Character>> characterMap = new HashMap<>();

    static {
        characterMap.put(1new HashSet<>(Arrays.asList(new Character[]{'q''w''e''r''t''y''u''i''o''p'})));
        characterMap.put(2new HashSet<>(Arrays.asList(new Character[]{'a''s''d''f''g''h''j''k''l'})));
        characterMap.put(3new HashSet<>(Arrays.asList(new Character[]{'z''x''c''v''b''n''m'})));
    }

    public static String[] findWords(String[] words) {
        if (words == null || words.length == 0) {
            return new String[0];
        }
        String[] result = new String[words.length];
        int index = 0, size = 0;
        for (String word : words) {
            if (word == null || word.length() == 0) {
                result[index++] = word;
                size++;
                continue;
            }
            char[] wordArr = word.toCharArray();
            char firstCharacter = wordArr[0];
            int rowNum = 1;
            for (Map.Entry<Integer, Set<Character>> characterEntry : characterMap.entrySet()) {
                if (characterEntry.getValue().contains(Character.toLowerCase(firstCharacter))) {
                    rowNum = characterEntry.getKey();
                    break;
                }
            }
            int i;
            for (i = 1; i < word.length(); i++) {
                if (!characterMap.get(rowNum).contains(Character.toLowerCase(wordArr[i]))) {
                    break;
                }
            }
            if (i == word.length()) {
                result[index++] = word;
                size++;
            }
        }
        return Arrays.copyOf(result, size);
    }

    public static void main(String[] args) {
        String[] words = new String[]{"Hello""Alaska""Dad""Peace"};
        for (String word : findWords(words)) {
            System.out.println(word);
        }
    }
}

【每日寄语】 平平淡淡看世界,踏踏实实写人生。


文章转载自明日之X,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论