108、鍵盤行
阿新 • • 發佈:2018-12-23
題目描述
我的程式碼
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]); } }