500. 键盘行
基本思路
- 创建三个字符串用于存储三行字符
- 遍历输入的字符
- 以头字符作为依据,遍历每个字符的字母判断是否包含在该行,不再直接跳出
- 最后把结果list转换成string
class Solution {
public String[] findWords(String[] words) {
String s1 = "qwertyuiop";
String s2 = "asdfghjkl";
String s3 = "zxcvbnm";
String tmp = s1;
List<String> list = new ArrayList<String>();
for(String s : words){
String ss = s.toLowerCase();
char c = ss.charAt(0);
if(s1.contains(c+"")){
tmp = s1;
}
else if(s2.contains(c+"")){
tmp = s2;
}
else if(s3.contains(c+"")){
tmp = s3;
}
list.add(s);
for(char cs : ss.toCharArray()){
if(!tmp.contains(cs+"")){
list.remove(s);
break;
}
}
}
String[] result = new String[list.size()];
return list.toArray(result);
}
}
改进
不用头字符作为依据,而是在遍历字符时以目标不在三行中的false作为判断,满足三行true条件才加入到list中
class Solution {
public String[] findWords(String[] words) {
String s1 = "qwertyuiop";
String s2 = "asdfghjkl";
String s3 = "zxcvbnm";
List<String> list = new LinkedList<>();
for(int i = 0; i < words.length; i ++) {
String s4 = words[i].toLowerCase();
Boolean flag1 = true, flag2 = true, flag3 = true;
for(int j = 0; j < words[i].length(); j ++) {
if(s1.indexOf(s4.charAt(j)) == -1) {
flag1 = false;
}
if(s2.indexOf(s4.charAt(j)) == -1) {
flag2 = false;
}
if(s3.indexOf(s4.charAt(j)) == -1) {
flag3 = false;
}
}
if(flag1 == true || flag2 == true || flag3 == true) {
list.add(words[i]);
}
}
String[] res = new String[list.size()];
for(int i = 0; i < list.size(); i ++) {
res[i] = list.get(i);
}
return res;
}
}