leetcode 500. Keyboard Row

来源:互联网 发布:知轩藏书下载 编辑:程序博客网 时间:2024/06/07 02:27

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:

  1. You may use one character in the keyboard more than once.
  2. You may assume the input string will only contain letters of alphabet.
这个我的思路就是对于一个单词,先看看它的首字母位于键盘的哪一行,接着再对于这个单词剩下的字母匹配是否在那一行内。

import java.util.ArrayList;import java.util.Arrays;public class Keyboard_Row_500 {char[][] keywords=new char[][]{{'q','w','e','r','t','y','u','i','o','p'},{'a','s','d','f','g','h','j','k','l'},{'z','x','c','v','b','n','m'}};private boolean isOK(String word){boolean isOK=true;word=word.toLowerCase();char[] chars=word.toCharArray();char firstChar=chars[0];int type=2;for(int i=0;i<keywords[0].length;i++){if(keywords[0][i]==firstChar){type=0;break;}}if(type!=1){for(int i=0;i<keywords[1].length;i++){if(keywords[1][i]==firstChar){type=1;break;}}}for(int i=1;i<chars.length;i++){char thisChar=chars[i];boolean isContains=false;for(int j=0;j<keywords[type].length;j++){if(thisChar==keywords[type][j]){isContains=true;break;}}if(isContains==false){isOK=false;break;}}return isOK;}public String[] findWords(String[] words) {ArrayList<String> s = new ArrayList<String>();for(int i=0;i<words.length;i++){if(isOK(words[i])==true){s.add(words[i]);}}String[] result=new String[s.size()];for(int i=0;i<s.size();i++){result[i]=s.get(i);}return result;}public static void main(String[] args) {// TODO Auto-generated method stubKeyboard_Row_500 k = new Keyboard_Row_500();String[] words=new String[]{"Hello", "Alaska", "Dad", "Peace"};System.out.println(Arrays.toString(k.findWords(words)));}}
然后看到大神有一行的解答:
public String[] findWords(String[] words) {    return Stream.of(words).filter(s -> s.toLowerCase().matches("[qwertyuiop]*|[asdfghjkl]*|[zxcvbnm]*")).toArray(String[]::new);}
这真是。。。正则大法好!
不过正则性能不行啊,它这个跑29个case用了91ms,我的方法只需要4ms...而且他里面用了Stream库和一些我不太懂的函数。。。果然大神用的方法都比较高级!


0 0
原创粉丝点击