• 500. Keyboard Row


    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:

    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.
    class Solution {
        public String[] findWords(String[] word) {
            String[] words = new String[word.length];
            for(int i = 0; i < word.length; i++) words[i] = word[i];
            ArrayList<String> list = new ArrayList();
            ArrayList<String> res = new ArrayList();
            if(words.length == 0 || words == null) return new String[]{};
            list.add("QWERTYUIOP");
            list.add("ASDFGHJKL");
            list.add("ZXCVBNM");
            Set<Character> s1 = new HashSet();
            for(char c: list.get(0).toCharArray()) s1.add(c);
            
            Set<Character> s2 = new HashSet();
            for(char c: list.get(1).toCharArray()) s2.add(c);
            
            Set<Character> s3 = new HashSet();
            for(char c: list.get(2).toCharArray()) s3.add(c);
            
            for(int i = 0; i < words.length; i++){
                words[i] = words[i].toUpperCase();
                int count = 0;
                int real = 0;
                if(s1.contains(words[i].charAt(0))) {count = 1; real = words[i].length();}
                if(s2.contains(words[i].charAt(0))) {count = 2; real = words[i].length() * 2;}
                if(s3.contains(words[i].charAt(0))) {count = 3; real = words[i].length() * 3;}
                
                for(int j = 1; j < words[i].length(); j++){
                    
                    char c = words[i].charAt(j);
                    if(s1.contains(c)) count += 1;
                    if(s2.contains(c)) count += 2;
                    if(s3.contains(c)) count += 3;
                }
                if(count == real) res.add(word[i]);
            }
            String[] resu = new String[res.size()];
            for(int i = 0; i < res.size(); i++) resu[i] = res.get(i);
            return resu;
        }
    }

    论如何把简单问题复杂化

    class Solution {
        public String[] findWords(String[] word) {
            String[] words = new String[word.length];
            for(int i = 0; i < word.length; i++) words[i] = word[i];
            ArrayList<String> list = new ArrayList();
            ArrayList<String> res = new ArrayList();
            if(words.length == 0 || words == null) return new String[]{};
            list.add("QWERTYUIOPqwertyuiop");
            list.add("ASDFGHJKLasdfghjkl");
            list.add("ZXCVBNMzxcvbnm");
     
            
            for(int i = 0; i < words.length; i++){
                int count = 0;
                int real = 0;
                int le = words[i].length();
                char first = words[i].charAt(0);
                if(list.get(0).indexOf(first) >= 0) {count = 1; real = le;}
                if(list.get(1).indexOf(first) >= 0) {count = 2; real = le * 2;}
                if(list.get(2).indexOf(first) >= 0) {count = 3; real = le * 3;}
                
                for(int j = 1; j < words[i].length(); j++){
                    
                    char c = words[i].charAt(j);
                    if(list.get(0).indexOf(c) >= 0) count += 1;
                    if(list.get(1).indexOf(c) >= 0) count += 2;
                    if(list.get(2).indexOf(c) >= 0) count += 3;
                }
                if(count == real) res.add(word[i]);
            }
            String[] resu = new String[res.size()];
            for(int i = 0; i < res.size(); i++) resu[i] = res.get(i);
            return resu;
        }
    }

    版本2,不用set,用indexOf判断

  • 相关阅读:
    还是不能偷懒ForEach陷阱
    备忘ForEach方法与foreach迭代器使用小区别
    备忘反射调用Private方法
    机器人也会梦见电子羊吗
    Windows 7 下Skype最小化到系统托盘
    编译Boost_1_37_0 For VS2008
    使用API判断网络是否连通(InternetGetConnectedState / IsNetworkAlive)
    SVN中“txncurrentlock:拒绝访问”错误
    幂函数的非递归算法
    Visual Studio中的文件类型(sln vcproj suo user ncb)
  • 原文地址:https://www.cnblogs.com/wentiliangkaihua/p/11947011.html
Copyright © 2020-2023  润新知