题目
类型:Array
解题思路
为每一个英文字母标记其对应键盘上的行号,然后检测字符串中所有字符对应的行号是否相同。
0表示第一行
1表示第二行
2表示第三行12210111011122000010020202表示A~Z的26个字母按顺序在哪一行
预处理计算出每个字符对应的行号。
遍历字符串时,统一将大写字母转化为小写字母方便计算。
代码
class Solution {public String[] findWords(String[] words) {List<String> list = new ArrayList<>();String rowIdx = "12210111011122000010020202";for (String word : words) {boolean isValid = true;char idx = rowIdx.charAt(Character.toLowerCase(word.charAt(0)) - 'a');for (int i = 1; i < word.length(); ++i) {if (rowIdx.charAt(Character.toLowerCase(word.charAt(i)) - 'a') != idx) {isValid = false;break;}}if (isValid) {list.add(word);}}String[] ans = new String[list.size()];for (int i = 0; i < list.size(); ++i) {ans[i] = list.get(i);}return ans;}}
