LeetCode500. 键盘行

绝地灬酷狼 2022-05-23 06:39 325阅读 0赞

给定一个单词列表,只返回可以使用在键盘同一行的字母打印出来的单词。键盘如下图所示。

American keyboard

示例1:

  1. 输入: ["Hello", "Alaska", "Dad", "Peace"]
  2. 输出: ["Alaska", "Dad"]

注意:

  1. 你可以重复使用键盘上同一字符。
  2. 你可以假设输入的字符串将只包含字母。

思路:为键盘的每一行字符构建一个哈希表,判断给定字符串是否完全由其中一个哈希表的字符构成。

  1. class Solution {
  2. public String[] findWords(String[] words) {
  3. String s1="qwertyuiopQWERTYUIOP";
  4. String s2="asdfghjklASDFGHJKL";
  5. String s3="zxcvbnmZXCVBNM";
  6. //为每一行的字符分别构建哈希表
  7. HashMap<Character,Integer> map1=new HashMap<Character,Integer>();
  8. HashMap<Character,Integer> map2=new HashMap<Character,Integer>();
  9. HashMap<Character,Integer> map3=new HashMap<Character,Integer>();
  10. for(char c:s1.toCharArray()) {
  11. map1.put(c, 1);
  12. }
  13. for(char c:s2.toCharArray()) {
  14. map2.put(c, 1);
  15. }
  16. for(char c:s3.toCharArray()) {
  17. map3.put(c, 1);
  18. }
  19. int i=0;
  20. for(String s:words) {
  21. if(isTrue(s,map1)||isTrue(s,map2)||isTrue(s,map3)) {
  22. words[i]=s;
  23. i++;
  24. }
  25. }
  26. return Arrays.copyOfRange(words, 0, i);
  27. }
  28. //判断给定字符串是否由map表中的字符构成
  29. public boolean isTrue(String s,HashMap<Character,Integer> map) {
  30. for(char c:s.toCharArray()) {
  31. if(!map.containsKey(c)) {
  32. return false;
  33. }
  34. }
  35. return true;
  36. }
  37. }

发表评论

表情:
评论列表 (有 0 条评论,325人围观)

还没有评论,来说两句吧...

相关阅读