力扣500键盘行

**

力扣500键盘行

**

  1. 键盘行 给你一个字符串数组 words ,只返回可以使用在 美式键盘 同一行的字母打印出来的单词。键盘如下图所示。

美式键盘 中:

第一行由字符 “qwertyuiop” 组成。 第二行由字符 “asdfghjkl” 组成。 第三行由字符 “zxcvbnm” 组成。
American keyboard
在这里插入图片描述

示例 1:

输入:words = [“Hello”,“Alaska”,“Dad”,“Peace”] 输出:[“Alaska”,“Dad”] 示例 2:

输入:words = [“omk”] 输出:[] 示例 3:

输入:words = [“adsdf”,“sfd”] 输出:[“adsdf”,“sfd”]

提示:

1 <= words.length <= 20 1 <= words[i].length <= 100 words[i]
由英文字母(小写和大写字母)组成 通过次数50,932提交次数68,492

class Solution {
public:
    vector<string> findWords(vector<string>& words) {
    	
    		  /*
		  基本的思路 
		  创建一个动态的字符串数组(更加地节省系统的资源)
		  将每一个单词先存储进这个数组
		  但是再后面经过检查之后
		  假如这个单词不符合题目要求,就把这个单词弹出来 
		  */ 
		
			//现在对26个英文字母进行的规定
        	string wordsNums = "12210111011122000010020202";
        
          	//重点,这个是创建一个字符串数组 
        	vector<string> returnWords;
        	for (int i = 0; i < words.size(); i++) {
            string s = words[i];
            
            //假如s[0] = B,那么tolower[tolower(s[0]) - 'a'] =
		  	//将这个单词里面的 第一个字母 进行转化为和上面规定的行数规则一样   
            int firstWordNum = wordsNums[tolower(s[0]) - 'a'];
            returnWords.push_back(s);
            
            //j = 1开始就可以了 
            for (int j = 1; j < s.size(); j++) {
                if (wordsNums[tolower(s[j]) - 'a'] != firstWordNum) {
                    returnWords.pop_back();
                    break;
                }
            }
        }
        return returnWords;
    }
};













/*
执行结果:
通过
显示详情
添加备注

执行用时:
0 ms
, 在所有 C++ 提交中击败了
100.00%
的用户
内存消耗:
6.6 MB
, 在所有 C++ 提交中击败了
80.16%
的用户
通过测试用例:
22 / 22
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值