Algorithm


Problem Name: 500. Keyboard Row

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). 

Code Examples

#1 Code Example with Java Programming

Code - Java Programming


class Solution {
  public String[] findWords(String[] words) {
    Map map = new HashMap<>();
    update(map, "qwertyuiop", 1);
    update(map, "asdfghjkl", 2);
    update(map, "zxcvbnm", 3);
    List < Integer> list = new ArrayList<>();
    for (int i = 0; i  <  words.length; i++) {
      int rowIdx = -1;
      for (char c : words[i].toCharArray()) {
        if (rowIdx == -1) {
          rowIdx = map.get(Character.toLowerCase(c));
        }
        if (map.get(Character.toLowerCase(c)) != rowIdx) {
          rowIdx = -1;
          break;
        }
      }
      if (rowIdx != -1) {
        list.add(i);
      }
    }
    String[] ans = new String[list.size()];
    for (int i = 0; i  <  list.size(); i++) {
      ans[i] = words[list.get(i)];
    }
    return ans;
  }
  
  private void update(Map < Character, Integer> map, String s, int row) {
    for (char c : s.toCharArray()) {
      map.put(c, row);
    }
  }
}
Copy The Code & Try With Live Editor

Input

x
+
cmd
words = ["Hello","Alaska","Dad","Peace"]

Output

x
+
cmd
["Alaska","Dad"]

#2 Code Example with Javascript Programming

Code - Javascript Programming


const findWords = function(words) {
  const regex = /^[qwertyuiop]*$|^[asdfghjkl]*$|^[zxcvbnm]*$/;
  return words.filter(
    s => (s.toLowerCase().match(regex) === null ? false : true)
  );
};
console.log(findWords(["Hello", "Alaska", "Dad", "Peace"]));
Copy The Code & Try With Live Editor

Input

x
+
cmd
words = ["Hello","Alaska","Dad","Peace"]

Output

x
+
cmd
["Alaska","Dad"]

#3 Code Example with Python Programming

Code - Python Programming


class Solution:
    def findWords(self, words):
        return [w for w in words if any(not set(w.lower()) - row for row in (set("qwertyuiop"), set("asdfghjkl"), set("zxcvbnm")))]
Copy The Code & Try With Live Editor

Input

x
+
cmd
words = ["omk"]

Output

x
+
cmd
[]

#4 Code Example with C# Programming

Code - C# Programming


using System.Collections.Generic;

namespace LeetCode
{
    public class _0500_KeyboardRow
    {
        public string[] FindWords(string[] words)
        {
            if (words.Length == 0) return words;

            var map = new Dictionary < char, int>();
            string r1 = "qwertyuiopQWERTYUIOP";
            foreach (var ch in r1)
                map[ch] = 1;
            string r2 = "asdfghjklASDFGHJKL";
            foreach (var ch in r2)
                map[ch] = 2;
            string r3 = "zxcvbnmZXCVBNM";
            foreach (var ch in r3)
                map[ch] = 3;

            var result = new List < string>();
            foreach (var word in words)
            {
                var flag = map[word[0]];
                var valid = true;
                foreach (var ch in word)
                {
                    if (flag != map[ch])
                    {
                        valid = false;
                        break;
                    }
                }

                if (valid)
                    result.Add(word);
            }

            return result.ToArray();
        }
    }
}
Copy The Code & Try With Live Editor

Input

x
+
cmd
words = ["omk"]

Output

x
+
cmd
[]
Advertisements

Demonstration


Previous
#498 Leetcode Diagonal Traverse Solution in C, C++, Java, JavaScript, Python, C# Leetcode
Next
#501 Leetcode Find Mode in Binary Search Tree Solution in C, C++, Java, JavaScript, Python, C# Leetcode