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;
});
};