题目

类型:Array
image.png

解题思路

为每一个英文字母标记其对应键盘上的行号,然后检测字符串中所有字符对应的行号是否相同。
0表示第一行
1表示第二行
2表示第三行
12210111011122000010020202表示A~Z的26个字母按顺序在哪一行
预处理计算出每个字符对应的行号。
遍历字符串时,统一将大写字母转化为小写字母方便计算。

代码

  1. class Solution {
  2. public String[] findWords(String[] words) {
  3. List<String> list = new ArrayList<>();
  4. String rowIdx = "12210111011122000010020202";
  5. for (String word : words) {
  6. boolean isValid = true;
  7. char idx = rowIdx.charAt(Character.toLowerCase(word.charAt(0)) - 'a');
  8. for (int i = 1; i < word.length(); ++i) {
  9. if (rowIdx.charAt(Character.toLowerCase(word.charAt(i)) - 'a') != idx) {
  10. isValid = false;
  11. break;
  12. }
  13. }
  14. if (isValid) {
  15. list.add(word);
  16. }
  17. }
  18. String[] ans = new String[list.size()];
  19. for (int i = 0; i < list.size(); ++i) {
  20. ans[i] = list.get(i);
  21. }
  22. return ans;
  23. }
  24. }