Leetcode.500. 键盘行---线性查找

500. 键盘行

给你一个字符串数组 words ,只返回可以使用在 美式键盘 同一行的字母打印出来的单词。键盘如下图所示。

美式键盘 中:

第一行由字符 “qwertyuiop” 组成。
第二行由字符 “asdfghjkl” 组成。
第三行由字符 “zxcvbnm” 组成。
American keyboard

示例 1:

输入:words = ["Hello","Alaska","Dad","Peace"]
输出:["Alaska","Dad"]
示例 2:

输入:words = ["omk"]
输出:[]
示例 3:

输入:words = ["adsdf","sfd"]
输出:["adsdf","sfd"]
 

提示:

1 <= words.length <= 20
1 <= words[i].length <= 100
words[i] 由英文字母(小写和大写字母)组成

题解:

我们创建一个长度为3的字符串数组s,分别存储"qwertyuiop" , "asdfghjkl", "zxcvbnm",接着对于words,依次检查它用到的字母是否只在s[0]或s[1]或s[2]中,如果符合则返回,不符合则不返回即可。

代码:

class Solution {
    
    
    public String[] findWords(String[] words) {
    
    
        String s1 = "qwertyuiopQWERTYUIOP";
        String s2 = "asdfghjklASDFGHJKL";
        String s3 = "zxcvbnmZXCVBNM";

        String[] res = new String[words.length];
        int index = 0;
        
        for(int i=0;i<words.length;i++){
    
    
            if(check(words[i],s1,s2,s3)){
    
    
                res[index++] = words[i];
            }
        }
        String[] resres = new String[index];
        for(int i=0;i<index;i++){
    
    
            resres[i] = res[i];
        }
        return resres;
    }

    public boolean check(String word,String s1,String s2,String s3){
    
    
        int i;
        for(i=0;i<word.length();i++){
    
    
            int index1 = 0;
            while(index1<s1.length()){
    
    
                if(s1.charAt(index1)==word.charAt(i)){
    
    
                    break;
                }
                else{
    
    
                    index1++;
                }
            }
            if(index1==s1.length()){
    
    
                break;
            }
        }
        if(i==word.length()){
    
    
            return true;
        }

        int j;
        for(j=0;j<word.length();j++){
    
    
            int index2 = 0;
            while(index2<s2.length()){
    
    
                if(s2.charAt(index2)==word.charAt(j)){
    
    
                    break;
                }
                else{
    
    
                    index2++;
                }
            }
            if(index2==s2.length()){
    
    
                // return true;
                break;
            }
        }
        if(j==word.length()){
    
    
            return true;
        }

        int k;
        for(k=0;k<word.length();k++){
    
    
            int index3 = 0;
            while(index3<s3.length()){
    
    
                if(s3.charAt(index3)==word.charAt(k)){
    
    
                    break;
                }
                else{
    
    
                    index3++;
                }
            }
            if(index3==s3.length()){
    
    
                break;
            }
        }
        if(k==word.length()){
    
    
            return true;
        }

        return false;

    }
}

猜你喜欢

转载自blog.csdn.net/xiangguang_fight/article/details/121086540