如题,有一个字符串它的构成是词+空格的组合,如“北京 杭州 杭州 北京”, 要求输入一个匹配模式(简单的以字符来写), 比如 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. 无法启动python怎么办_解决python写的windows服务不能启动的问题
  2. cmd批处理命令与变量(下)
  3. WeChat小程序授权机制踩坑请求头中设置cookie保持session
  4. docker -v 覆盖了容器中的文件_10分钟让你理解 docker 容器中的 uid 和 gid
  5. 最新蚂蚁金服Java面试题:Docker+秒杀设计+RocketMQ+亿级数据设计
  6. 断言(Assertion)需要注意的一个地方
  7. JavaScript Module Pattern
  8. 常用CNN网络(AlexNet,GoogleNet,VGG,ResNet,DenseNet,inceptionV4)适合初学者
  9. python练习集100题_Python练习集100题
  10. STM32——库函数版——RGB8x8全彩点阵程序
  11. Androd传感器之陀螺仪传感器学习
  12. 知识付费的内容变现有哪些方式?
  13. 什么是动态代理?两种常用的动态代理方式
  14. kafka sparksteaming
  15. 游程编码(运行长度编码)
  16. Netty——ByteBuffer(ByteBuffer消息粘包、半包示例)
  17. beyond compare linux中文包,linux 下安装 Beyond Compare
  18. c语言传奇引擎源码,Ei3.0服务端引擎源代码+登陆网关+客户端插件
  19. 【图像分割】基于差分进化算法优化模糊熵实现多级图像阈值分割附matlab代码
  20. 黑马培训教学SSM整合中Security遇到的问题org.springframework.security.access.AccessDeniedException: Access is denied

热门文章

  1. #网站图标、地址栏图标、收藏夹图标、favicon.ico
  2. HSL:色相,饱和度,亮度
  3. 支付宝Html授权,网页版的支付宝授权登录(vue+java)
  4. @Value的诸多用法
  5. 谷歌 zx 脚手架模块中文文档
  6. 固定table中的TH的高度和TD的宽度
  7. BGP高防服务器是什么?要怎么选?
  8. 第一次软件工程课程作业
  9. 如何保留优秀的程序员
  10. Linux:GNU/Linux、BSD、自由软件、GPL、glibc词义说明