108、键盘行

题目描述
在这里插入图片描述

我的代码

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]);
    }
}

猜你喜欢

转载自blog.csdn.net/qq_34446716/article/details/85041811
108