Keyboard Row

Posted 白常福

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Keyboard Row相关的知识,希望对你有一定的参考价值。

Given a List of words, return the words that can be typed using letters of alphabet on only one row‘s of American keyboard like the image below.


技术分享


Example 1:

Input: ["Hello", "Alaska", "Dad", "Peace"]
Output: ["Alaska", "Dad"]

 

Note:

  1. You may use one character in the keyboard more than once.
  2. You may assume the input string will only contain letters of alphabet.

 

分析:判断给定的字符串数组中满足在键盘中属于同一行的字符串,并返回该数组集合。注意给定的字符串是大小写混合的。

思路:将键盘上三行字符分别保存到三个字符串中,然后判断每个字符串是否都属于同一行。具体的看注释:

class Solution {
    public String[] findWords(String[] words) {
        // 将待对比的数组存入
        String row1 = "qwertyuiop";
        String row2 = "asdfghjkl";
        String row3 = "zxcvbnm";
        // 将符合条件的字符串放入ArrayList,之后转为字符串数组
        ArrayList<String> new_words = new ArrayList<>();
        for (int i = 0; i < words.length; i++) {
            // 标记是否满足条件
            boolean tt = false;
            // 将要检查的字符串转成小写
            String word = words[i].toLowerCase();
            // 标记字符串属于第几行
            int loop = 0;
            for(int j = 0; j < word.length(); j++){
                char ch = word.charAt(j);
                if(j==0){
                    // 给初始行赋值
                    if(row1.indexOf(ch)!=-1)
                        loop=1;
                    if(row2.indexOf(ch)!=-1)
                        loop=2;
                    if(row3.indexOf(ch)!=-1)
                        loop=3;
                }else {
                    // 若存在不同行,则进行标记,不满足条件,为TRUE
                    if(row1.indexOf(ch)!=-1&&loop!=1){
                        tt=true;
                        break;
                    }
                    if(row2.indexOf(ch)!=-1&&loop!=2){
                        tt=true;
                        break;
                    }
                    if(row3.indexOf(ch)!=-1&&loop!=3){
                        tt=true;
                        break;
                    }
                }
            }
            if (tt) {
                continue;
            }
            new_words.add(words[i]);
        }
     // 将ArrayList转成字符串数组常用套路 String[] ss
= new String[new_words.size()]; new_words.toArray(ss); return ss; } }

 

 

 




以上是关于Keyboard Row的主要内容,如果未能解决你的问题,请参考以下文章

leetcode算法: Keyboard Row

500. Keyboard Row

500. Keyboard Row

18.Keyboard Row

500. Keyboard Row

Keyboard Row