题目描述:
给定一个单词列表,只返回可以使用在键盘同一行的字母打印出来的单词。键盘如下图所示。
示例1:
输入: ["Hello", "Alaska", "Dad", "Peace"] 输出: ["Alaska", "Dad"]
注意:
- 你可以重复使用键盘上同一字符。
- 你可以假设输入的字符串将只包含字母。
解题思路:
此题抽象出来就是简单的在字符串中查找字符的问题。但是本题有一个关键点,那就是大小写区分的问题。一开始我是将大小写字符都放在被查找字符串中,这样就不存在小写字母找不到的情况了,后面感觉这个办法有点low(哈哈开玩笑,这个是最好的办法,就是想搞事的^_^),后面就添加了一个大小写转换函数“transform”。
AC代码:
class Solution {
public:
vector<string> findWords(vector<string>& words) {
string L1 = "QWERTYUIOP";//"QWERTYUIOPqwertyuiop";
string L2 = "ASDFGHJKL";//"ASDFGHJKLasdfghjkl";
string L3 = "ZXCVBNM";//"ZXCVBNMzxcvbnm";
vector<string> Fwords;
for (int i = 0; i < words.size(); i++)
{
string strTemp(words[i]);
int sum1 = 0, sum2 = 0, sum3 = 0;
transform(words[i].begin(), words[i].end(), strTemp.begin(), ::toupper);
for (int j = 0; j < strTemp.size(); j++)
{
if (L1.find(strTemp[j]) != -1)sum1++;
if (L2.find(strTemp[j]) != -1)sum2++;
if (L3.find(strTemp[j]) != -1)sum3++;
}
if (sum1 == strTemp.size()) Fwords.push_back(strTemp);
if (sum2 == strTemp.size()) Fwords.push_back(strTemp);
if (sum3 == strTemp.size()) Fwords.push_back(strTemp);
}
return Fwords;
}
};