返回介绍

solution / 0500-0599 / 0500.Keyboard Row / README_EN

发布于 2024-06-17 01:04:00 字数 5220 浏览 0 评论 0 收藏 0

500. Keyboard Row

中文文档

Description

Given an array of strings words, return _the words that can be typed using letters of the alphabet on only one row of American keyboard like the image below_.

In the American keyboard:

  • the first row consists of the characters "qwertyuiop",
  • the second row consists of the characters "asdfghjkl", and
  • the third row consists of the characters "zxcvbnm".

 

Example 1:

Input: words = ["Hello","Alaska","Dad","Peace"]
Output: ["Alaska","Dad"]

Example 2:

Input: words = ["omk"]
Output: []

Example 3:

Input: words = ["adsdf","sfd"]
Output: ["adsdf","sfd"]

 

Constraints:

  • 1 <= words.length <= 20
  • 1 <= words[i].length <= 100
  • words[i] consists of English letters (both lowercase and uppercase). 

Solutions

Solution 1

class Solution:
  def findWords(self, words: List[str]) -> List[str]:
    s1 = set('qwertyuiop')
    s2 = set('asdfghjkl')
    s3 = set('zxcvbnm')
    ans = []
    for w in words:
      s = set(w.lower())
      if s <= s1 or s <= s2 or s <= s3:
        ans.append(w)
    return ans
class Solution {
  public String[] findWords(String[] words) {
    String s = "12210111011122000010020202";
    List<String> ans = new ArrayList<>();
    for (var w : words) {
      String t = w.toLowerCase();
      char x = s.charAt(t.charAt(0) - 'a');
      boolean ok = true;
      for (char c : t.toCharArray()) {
        if (s.charAt(c - 'a') != x) {
          ok = false;
          break;
        }
      }
      if (ok) {
        ans.add(w);
      }
    }
    return ans.toArray(new String[0]);
  }
}
class Solution {
public:
  vector<string> findWords(vector<string>& words) {
    string s = "12210111011122000010020202";
    vector<string> ans;
    for (auto& w : words) {
      char x = s[tolower(w[0]) - 'a'];
      bool ok = true;
      for (char& c : w) {
        if (s[tolower(c) - 'a'] != x) {
          ok = false;
          break;
        }
      }
      if (ok) {
        ans.emplace_back(w);
      }
    }
    return ans;
  }
};
func findWords(words []string) (ans []string) {
  s := "12210111011122000010020202"
  for _, w := range words {
    x := s[unicode.ToLower(rune(w[0]))-'a']
    ok := true
    for _, c := range w[1:] {
      if s[unicode.ToLower(c)-'a'] != x {
        ok = false
        break
      }
    }
    if ok {
      ans = append(ans, w)
    }
  }
  return
}
function findWords(words: string[]): string[] {
  const s = '12210111011122000010020202';
  const ans: string[] = [];
  for (const w of words) {
    const t = w.toLowerCase();
    const x = s[t.charCodeAt(0) - 'a'.charCodeAt(0)];
    let ok = true;
    for (const c of t) {
      if (s[c.charCodeAt(0) - 'a'.charCodeAt(0)] !== x) {
        ok = false;
        break;
      }
    }
    if (ok) {
      ans.push(w);
    }
  }
  return ans;
}
public class Solution {
  public string[] FindWords(string[] words) {
    string s = "12210111011122000010020202";
    IList<string> ans = new List<string>();
    foreach (string w in words) {
      char x = s[char.ToLower(w[0]) - 'a'];
      bool ok = true;
      for (int i = 1; i < w.Length; ++i) {
        if (s[char.ToLower(w[i]) - 'a'] != x) {
          ok = false;
          break;
        }
      }
      if (ok) {
        ans.Add(w);
      }
    }
    return ans.ToArray();
  }
}

Solution 2

class Solution:
  def findWords(self, words: List[str]) -> List[str]:
    ans = []
    s = "12210111011122000010020202"
    for w in words:
      x = s[ord(w[0].lower()) - ord('a')]
      if all(s[ord(c.lower()) - ord('a')] == x for c in w):
        ans.append(w)
    return ans

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文