Given a List of words, return the words that can be typed using letters of alphabet on only one row’s of American keyboard like the image below.
Example 1:
- Input: [“Hello”, “Alaska”, “Dad”, “Peace”]
- Output: [“Alaska”, “Dad”]
Note:
- You may use one character in the keyboard more than once.
- You may assume the input string will only contain letters of alphabet.
나의 풀이
every메소드를 써서 키보드 배열 중 모든 문자열이 속하는 배열이 있는 지 확인하는 부분에서 반복문을 쓸까 하다가 키보드 배열의 값은 변경될 일이 없을 것 같고 반복문 쓰면서 every의 반환값을 어딘가에 저장해두는 것이 더 좋은 방법 같지는 않아서 다음과 같이 풀었다.
| 1 | // 48ms | 
정규식이랑 match() 메소드, some()메소드를 이용해 다른 방법으로 풀어보았다. result에 한번 match의 반환값을 저장할 필요가 있었는데, join()으로 다시 문자열 결합할 때, match의 반환값이 배열이 아니라 null일때도 있기 때문이다.
| 1 | // 52ms | 
다른 사람 풀이
정규식을 굉장히 잘 사용한 풀이인 것 같다. ^과 $을 이용해서 문자셋으로만 구성된 단어인지 여부를 RegExp test() 메소드를 통해서 bool값으로 반환하도록 했다.1
2
3
4
5
6
7
8
9
10
11
12var findWords = function(words) {
    return words.filter((w) => {
        // remove word from array if it fails matching all three rows
        if (
            !/^[qwertyuiop]*$/i.test(w) &&
            !/^[asdfghjkl]*$/i.test(w) &&
            !/^[zxcvbnm]*$/i.test(w)
        ) return false;
        
        return true;
    });
};