杭州天猫编程题

//评测题目: 有一个字符串它的构成是词+空格的组合,如“北京+杭州+杭州+北京”,+要求输入一个匹配模式(简单的以字符来写),+比如+aabb,+来判断该字符串是否符合该模式,+举个例子:
//1.pattern="abba",str="北京 杭州 杭州 北京"返回ture
//2.pattern="aabb",str="北京 杭州 杭州 北京"返回false
//3.pattern="baab",str="北京 杭州 杭州 北京"返回ture

下面本人愚见


public class Main {

    public static void main(String[] args) {
        String pattern = "aabb";
        String str = "通过 通过 pass pass";
        boolean flag = wordPattern(pattern, str);
        System.out.println(flag);
    }

    public static boolean wordPattern(String pattern,String str){
        //空值校验省略
        String a = null;
        String b = null;
        String[] strArr = str.split(" ");
        StringBuffer sb = new StringBuffer();
        for(String param : strArr) {
            if(a == null) {
                a = param;
                sb = sb.append("a");
            }else if(a.equals(param)){
                sb = sb.append("a");
            }else if(b == null) {
                b = param;
                sb = sb.append("b");
            } else if(b.equals(param)) {
                sb = sb.append("b");
            }
        }
        return pattern.equals(sb.toString());
    }
}

上面是硬编码,下面使用了集合框架,同时提供了更宽可用性,在复杂度上有所增加。

public static boolean wordPattern(String pattern, String str) {
        Map map = new HashMap();
        Set set = new HashSet();
        String[] pieces = str.split(" ");
        if(pieces.length != pattern.length()) return false;
        int i = 0;
        for(String s : pieces){
            char p = pattern.charAt(i);
            System.out.println(p);
            // 如果该字符产生过映射
            if(map.containsKey(p)){
                // 且映射的字符串和当前字符串不一样
                if(!s.equals(map.get(p))) return false;
            } else {
                // 如果该字符没有产生过映射
                // 如果当前字符串已经被映射过了
                if(set.contains(s)) return false;
                // 否则新加一组映射
                map.put(p, s);
                set.add(s);
            }
            i++;
        }
        return true;
    }

你可能感兴趣的:(杭州天猫编程题)