500、键盘行
题目:
给你一个字符串数组 words
,只返回可以使用在 美式键盘 同一行的字母打印出来的单词。键盘如下图所示。
美式键盘 中:
- 第一行由字符
"qwertyuiop"
组成。 - 第二行由字符
"asdfghjkl"
组成。 - 第三行由字符
"zxcvbnm"
组成。
示例 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]
由英文字母(小写和大写字母)组成
解答:
List<string> result = new List<string>();
foreach (string word in words)
{
if (Method(word))
{
result.Add(word);
}
}
return result.ToArray();
//判断word在那一行
public bool Method(string word)
{
string str1 = "qwertyuiop";
string str2 = "asdfghjkl";
string str3 = "zxcvbnm";
word = word.ToLower();
string flag = "";
if (word.Length <= 1)
{
return true;
}
//先把word的第一个数字在那行作为一个标志
if (str1.Contains(word[0]))
{
flag = str1;
}
else if (str2.Contains(word[0]))
{
flag = str2;
}
else if (str3.Contains(word[0]))
{
flag = str3;
}
//用第一个标志来查看word的其他的字母
for (int i = 0; i < word.Length; i++)
{
if (!flag.Contains(word[i]))
{
return false;
}
}
return true;
}