在 Leetcode 上有一个问题, 是说给出一个 string 数组, 输出其中可以在英文键盘上同一行打出来的字符串. 我当时的想法是用正则表达式, 代码如下:
public string[] FindWords(string[] words)
{
return words.Where(x => Regex.Match(
x, @"[qwertyuiop]*|[asdfghjkl]*|[zxcvbnm]*",
RegexOptions.IgnoreCase).Value == x).ToArray();
}
也验证了正则表达式的正确性 ,可是 Match 得到的结果总是和理想中的不一样, 如输入:
["a", "b", "p", "Hello"] 得到的结果只有一个 "p" 而且我发现根据表达式中 "*" 与 "|" 之间是否加空格, 得到的结果也各有不同.
请问问题是在哪里? 谢谢!
写个循环还更方便点.
会不会是没加括号
或许循环快一些, 只是想就这个解决方法请教一下为什么我在 "|" 和 "*" 之间添加不同的空格会有不同的结果? 以及这个表达式错在哪里?
@wu_overflow: 空格会被当成和一个需要匹配的字符吧.
而且如果是判断一整个字符串都能被一行打出来.那直接加开头结尾约束就好了
这个用正则做比较亏吧。应该是把键盘上一行字符的ascii堆一起来判断吧。