题意
给出一串字符words,判断字符中的字符是否都在键盘的同一列上
假设words字符只包含大小写字符
题解
对words中的每一个word,找出第一个字符所在行数row,对剩余的字符进行判断,如果都在,则res加入该word
public class Solution {
private static String[] keyboard = {"qwertyuiop", "asdfghjkl", "zxcvbnm"};
public String[] findWords(String[] words) {
//res动态数组存储返回结果
List<String> res = new ArrayList<String>();
for(String word : words)
{
//边界条件:word单词中无字符
if(word.length() == 0)
continue;
//row是word中第一个字符所在键盘行数
int row = 0;
for (row = 0; row < 3; row++) {
if (inRow(word.charAt(0), row)) break;
}
//row>=3:第一个字母不在键盘keyboard中,直接判断第二个word
if (row >= 3) continue;
boolean flag = true;
//对word剩余的字母判断是否在row中
for(int i = 1;i < word.length();i ++)
{
if(!inRow(word.charAt(i),row))
{
flag = false;
break;
}
}
//符合同一行的字符加入结果中
if(flag) res.add(word);
}
return res.toArray(new String[res.size()]);
}
private boolean inRow(char c, int row) {
if (keyboard[row].contains(Character.toLowerCase(c)+"")) return true;
else return false;
}
}