题目描述
我的代码
class Solution {
public String[] findWords(String[] words) {
List<String> list = new ArrayList<>();
int size = 0;
String tem[] = {"qwertyuiop","asdfghjkl","zxcvbnm"};
for (int i = 0; i < words.length; i++) {
//全部转成小写
String word = words[i].toLowerCase();
if(word.length() == 0){
continue;
}
//判断第一个字符在哪一行中
char start = word.charAt(0);
int x = tem[0].indexOf(start);
int y = tem[1].indexOf(start);
if(x != -1){
if(conti(0, word)){
list.add(words[i]);
}
}else if ( y != -1) {
if(conti(1, word)){
list.add(words[i]);
}
}else {
if(conti(2, word)){
list.add(words[i]);
}
}
}
String [] result = new String[list.size()];
for (String string : list) {
result[size ++] = string;
}
System.out.println(Arrays.toString(result));;
return result;
}
public static boolean conti(int i,String word){
String tem[] = {"qwertyuiop","asdfghjkl","zxcvbnm"};
int j = 0;
for ( ; j < word.length(); j++) {
if(tem[i].indexOf(word.charAt(j)) == -1){
break;
}
}
if(j == word.length())
return true;
else {
return false;
}
}
}
排名靠前的代码,有点蒙蔽
class Solution {
private final int[] LETTER = new int[]{2, 3, 3, 2, 1, 2, 2, 2, 1, 2, 2, 2, 3, 3, 1, 1, 1, 1, 2, 1, 1, 3, 1, 3, 1, 3};
public String[] findWords(String[] words) {
int j = 0;
for (int i = 0; i < words.length; i++) {
if (isOneRow(words[i])) {
exch(words, i, j++);
}
}
return Arrays.copyOfRange(words, 0, j);
}
private boolean isOneRow(String s) {
char[] chars = s.toCharArray();
int row = LETTER[getOffset(chars[0])];
for (int i = 1; i < chars.length; i++) {
if (LETTER[getOffset(chars[i])] != row) return false;
}
return true;
}
private void exch(String[] words, int i, int j) {
String temp = words[i];
words[i] = words[j];
words[j] = temp;
}
private int getOffset(char c) {
if (c >= 'a' && c <= 'z') {
return c - 'a';
}
if (c >= 'A' && c <= 'Z') {
return c - 'A';
}
return -1;
}
}
这个有点懂
class Solution {
public String[] findWords(String[] words) {
String[] base = {"qwertyuiop", "asdfghjkl", "zxcvbnm"};
Map<Character, Integer> hashMap = new HashMap<>(); // <char, rowIndex>
for(int i=0; i<base.length; i++){
for(char c : base[i].toCharArray()){
hashMap.put(c, i);
}
}
List<String> res = new ArrayList<>();
for(String word : words){
int index = hashMap.get(word.toLowerCase().toCharArray()[0]);
for(char c : word.toLowerCase().toCharArray()){
if(hashMap.get(c) != index){
index = -1;
break;
}
}
if(index != -1){
res.add(word);
}
}
return res.toArray(new String[0]);
}
}