leetcode[Keyboard Row]//待整理多种解法

本文介绍了一种使用Java实现的方法,能够找出输入单词数组中所有可以用同一行键盘按键拼写的单词。通过将字母映射到不同的键盘行集合,并检查每个单词的所有字母是否都在同一行,实现了这一功能。

解法一:

public class Solution {
    public String[] findWords(String[] words) {
        Set<Character> row1 = new HashSet<>();
        Set<Character> row2 = new HashSet<>();
        Set<Character> row3 = new HashSet<>();
        row1.addAll(Arrays.asList('Q','W','E','R','T','Y','U','I','O','P'));
        row2.addAll(Arrays.asList('A','S','D','F','G','H','J','K','L'));
        row3.addAll(Arrays.asList('Z','X','C','V','B','N','M'));
        
        int[] index = new int[words.length];//用index来判断是否满足条件,1代表满足条件,0代表不满足条件
        int count = 0;//用于计数,判断满足条件的字符串个数
        
        for(int i = 0; i < words.length; i++){
        	//先判断这个字符串的第一个字符,将其归到哪一行去,再判断,空字符串单独处理
        	if(words[i].length() == 0){
        		index[i] = 1;
        	} else{
        		String upper = words[i].toUpperCase();//统一换成大写形式
        		char c = upper.charAt(0);
        		if(row1.contains(c)){//这个字符串应该归第一行处理
        			boolean flag = true;
        			for(int j = 1; j < upper.length(); j++){
        				if(!row1.contains(upper.charAt(j))){
        					flag = false;
        					break;
        				}
        			}
        			if(flag){
        				index[i] = 1;
        				count++;
        			} else{
        				index[i] = 0;
        			}
        			
        		} else if(row2.contains(c)){//这个字符串应该归第二行处理
        			boolean flag = true;
        			for(int j = 1; j < upper.length(); j++){
        				if(!row2.contains(upper.charAt(j))){
        					flag = false;
        					break;
        				}
        			}
        			if(flag){
        				index[i] = 1;
        				count++;
        			} else{
        				index[i] = 0;
        			}
        			
        		} else{//这个字符串应该归第三行处理
        			boolean flag = true;
        			for(int j = 1; j < upper.length(); j++){
        				if(!row3.contains(upper.charAt(j))){
        					flag = false;
        					break;
        				}
        			}
        			if(flag){
        				index[i] = 1;
        				count++;
        			} else{
        				index[i] = 0;
        			}
        			
        		}
        	}
        }
        
        String[] res = new String[count];
        int move = 0;
        for(int i = 0; i < index.length; i++){
        	if(index[i] == 1){
        		res[move++] = words[i];
        	}
        }
        
        return res;
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值