2021.10.31 - 137.键盘行

文章目录

1. 题目

2021.10.31 - 137.键盘行

2. 思路

(1) HashMap

  • 将每个字母及其对应的序号存入HashMap中,遍历字符串时,首先确定第一个字符的序号,若之后存在其他字符的序号不等于第一个字符的序号,则排除这个字符串,否则将其加入结果集。

(2) 哈希表优化

  • 利用一个长度为26的字符串代替HashMap,字符下标即为字母在字母表中的位置,字符即为字母对应的序号。

3. 代码

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Test {
    public static void main(String[] args) {
    }
}

class Solution {
    public String[] findWords(String[] words) {
        Map<Character, Integer> map = new HashMap<Character, Integer>() {{
            put('q', 1);
            put('w', 1);
            put('e', 1);
            put('r', 1);
            put('t', 1);
            put('y', 1);
            put('u', 1);
            put('i', 1);
            put('o', 1);
            put('p', 1);
            put('a', 2);
            put('s', 2);
            put('d', 2);
            put('f', 2);
            put('g', 2);
            put('h', 2);
            put('j', 2);
            put('k', 2);
            put('l', 2);
            put('z', 3);
            put('x', 3);
            put('c', 3);
            put('v', 3);
            put('b', 3);
            put('n', 3);
            put('m', 3);
        }};
        List<String> res = new ArrayList<>();
        for (String word : words) {
            int num = map.get(Character.toLowerCase(word.charAt(0)));
            int index = 1;
            while (index < word.length()) {
                if (map.get(Character.toLowerCase(word.charAt(index))) != num) {
                    break;
                }
                index++;
            }
            if (index == word.length()) {
                res.add(word);
            }
        }
        return res.toArray(new String[0]);
    }
}

class Solution1 {
    public String[] findWords(String[] words) {
        String charNum = "23321222122233111121131313";
        List<String> res = new ArrayList<>();
        for (String word : words) {
            char num = charNum.charAt(Character.toLowerCase(word.charAt(0)) - 'a');
            int index = 1;
            while (index < word.length()) {
                if (charNum.charAt(Character.toLowerCase(word.charAt(index)) - 'a') != num) {
                    break;
                }
                index++;
            }
            if (index == word.length()) {
                res.add(word);
            }
        }
        return res.toArray(new String[0]);
    }
}
上一篇:137. 只出现一次的数字 II


下一篇:关于对Floyd算法的思索