杭州天猫编程题

//评测题目: 有一个字符串它的构成是词+空格的组合,如“北京+杭州+杭州+北京”,+要求输入一个匹配模式(简单的以字符来写),+比如+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<Character, String> map = new HashMap<Character, String>();
        Set<String> set = new HashSet<String>();
        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;
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在挖掘分析的过程当中对字符串的处理是极为重要的,且出现也较为频繁,R语言作为当前最为流行的开源数据分析和可视化平台...
    果果哥哥BBQ阅读 5,973评论 0 8
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,156评论 19 139
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,275评论 0 4
  • 年龄差距大的不同点在哪? 年轻的我们总在厌烦现在,憧憬未来,害怕麻烦等等等等,而垂暮的老人好像只有感受孤独,恐惧死...
    离人怎挽w阅读 235评论 0 0
  • 自从写作以来,我就把《大学》里这句:“苟日新,日日新,又日新”作为自己的座右铭。 年轻时为了光宗耀祖,为了生存奔波...
    一笑人生阅读 333评论 4 8