如题,有一个字符串它的构成是词+空格的组合,如“北京 杭州 杭州 北京”, 要求输入一个匹配模式(简单的以字符来写), 比如 aabb, 来判断该字符串是否符合该模式, 举个例子:

  1. pattern = “abba”, str=“北京 杭州 杭州 北京” 返回 true
  2. pattern = “aabb”, str=“北京 杭州 杭州 北京” 返回 false
  3. pattern = “baab”, str=“北京 杭州 杭州 北京” 返回 true

以下是我自己想到的一种解决方式,基于java8的stream新特性,如果有更好的方案,请评论交流指正,谢谢

import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;import static java.util.Arrays.stream;/*** 测试** @author ljs.song* @date 2017-09-21 22:21*/
public class Test {public static void main(String[] args) {System.out.println(matchStr("aa aa aa","aaa"));}/*** 思路:*    1. 首先找出匹配字串a的排重后的字符列表 s0*    2. 再找出被匹配字串b的排重后的字符列表 s1*    3. 比较两个字符列表size是否相同*      3.1 不同,直接false*      3.2 相同,则将s1中元素与s0中元素一一对应后,将被匹配字符串b的相应字符替换得到s2*          3.2.1 替换后,最终比较 s2的去除空格后的字符串是否与a相等*          3.2.2 不同,false,反之,true* @param data 被匹配* @param partt 匹配* @return*/public static boolean matchStr(String data,String partt){String[] vals = data.split(" ");List<String> dataDist = Arrays.stream(vals).distinct().collect(Collectors.toList());dataDist.forEach(s -> System.out.println(s+"----"));char[] parrttSplit = partt.toCharArray();String[] parrtStr = new String[parrttSplit.length];for (int i = 0; i < parrttSplit.length; i++) {parrtStr[i] = String.valueOf(parrttSplit[i]);}List<String> parrtDist = Arrays.stream(parrtStr).distinct().collect(Collectors.toList());if(parrtDist.size() != dataDist.size()){System.out.println("size 不同");return false;}for (int i = 0; i < parrtDist.size(); i++) {partt = partt.replace(parrtDist.get(i),dataDist.get(i));}if(!partt.equals(data.replace(" ",""))){return false;}return true;}
}

安利一门Python超级好课!
扫码下单输优惠码【csdnfxzs】再减5元,比官网还便宜!

面试-字符串匹配ABBA模式相关推荐

  1. 【NLP】darmatch: 一个非常高效的多模式字符串匹配工具

    darmatch 是一个非常高效的字符串匹配工具,支持正向/反向最大匹配分词和多模式字符串精确匹配: 仅包含头文件 (header-only) 基于双数组字典树 (double-array trie) ...

  2. 蛮力法在字符串匹配问题中的应用(JAVA)--朴素模式匹配算法

    蛮力法在字符串匹配问题中的应用 字符串匹配问题通常是给定一个n个字符组成的串(称为文本),一个m(m<=n)个字符的串(称为模式),从文本中寻找匹配模式的子串.显然我们需要逐个匹配,这是蛮力算法 ...

  3. 《柔性字符串匹配》读书笔记(1)之--KMP算法(单模式串匹配、前缀匹配)

                                                                                                        ...

  4. 数据结构与算法 / 字符串匹配 / BF、PK 算法

    零.前言 为了下面便于说明,先定义两个名词,分别是主串和模式串.在字符串 A 中查找字符串 B,则 A 为主串,B 为模式串. 假设,主串中字符数量为 L1,模式串的字符数量为 L2 . 一.BF 算 ...

  5. 字符串匹配之KMP---全力解析

    PS:文章是转载的 下方的微信公号不是我的 是原作者的.附上原文链接:字符串匹配之KMP jeliy王的博客 近日,一同学面试被问到字符串匹配算法,结果由于他使用了暴力法,直接就跪了(现在想想这样的面 ...

  6. 字符串匹配KMP算法的理解(详细)

    1. 引言 本KMP原文最初写于2年多前的2011年12月,因当时初次接触KMP,思路混乱导致写也写得混乱.所以一直想找机会重新写下KMP,但苦于一直以来对KMP的理解始终不够,故才迟迟没有修改本文. ...

  7. 字符串匹配值Sunday算法

    实现strStr() 题目:实现 strStr() 实现 strStr() 函数.给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符 ...

  8. KMP算法-字符串匹配(浅显易懂)

    KMP的经典思想就是:当出现字符串不匹配时,可以记录一部分之前已经匹配的文本内容,利用这些信息避免从头再去做匹配. 本篇将以如下顺序来讲解KMP, 什么是KMP KMP有什么用 什么是前缀表 为什么一 ...

  9. 子串查找(字符串匹配)

    子串查询 首先,我们来定义两个概念,主串和模式串.我们在字符串 A 中查找字符串 B,则 A 就是主串,B 就是模式串.我们把主串的长度记为 n,模式串长度记为 m.由于是在主串中查找模式串,因此,主 ...

最新文章

  1. Eclipse上GIT插件EGIT使用手册之八_解决推送冲突
  2. python 数据分析学什么-学好python和数据分析有什么关系?
  3. 开发WAP站点之---使用PC电脑浏览器访问WAP手机站点 (转)
  4. 提高 Java 代码质量
  5. 列表字符串集合字典的常见方法
  6. Nginx, HTTPS的配置
  7. [Python人工智能] 八.卷积神经网络CNN原理详解及TensorFlow编写CNN
  8. Struts 2基础入门
  9. 阿里云mariadb无法启动问题
  10. python 捕获鼠标点击事件,在Python中的wx.Frame外部捕获鼠标事件
  11. MATLAB使用教程(三)——在文件中编程
  12. 飞鸽传书2009的“真正价值”
  13. Mysql(一)——基础知识
  14. 如何向Word中插入代码块
  15. 01-nodeJs下载及安装
  16. 步进电机驱动器细分功能的介绍以及设置
  17. java里oop思想_Java OOP 思想解析
  18. appinventor网络编程php,AppInventor离线版下载
  19. 经纬度坐标系转东北天_经纬度坐标系转换
  20. linux下github使用教程,Linux下git操作GitHub步骤教程

热门文章

  1. 神经协同过滤Neural Collaborative Filtering(NCF)
  2. matlab计算图片基频,复倒频谱 - 基频估计
  3. 【Android Gradle 插件】DexOptions 配置 ③ ( additionalParameters 属性配置 | 多 dex 参数配置 | --multi-dex 参数 )
  4. [精]Oracle VPD详解(虚拟专用数据库)
  5. xtrabackup备份失败问题解决
  6. VMware ESXi启动卡在 vmkibft loaded successfully
  7. windows defender红叉解决方法
  8. 学校计算机学院教学管理ER图,教学管理系统数据库ER图及SQL语句.doc
  9. 申请软著材料提交注意事项
  10. 关梅西多大的事:从尤文电话门结果,看巴萨裁判门事件走势