面试-字符串匹配ABBA模式
如题,有一个字符串它的构成是词+空格的组合,如“北京 杭州 杭州 北京”, 要求输入一个匹配模式(简单的以字符来写), 比如 aabb, 来判断该字符串是否符合该模式, 举个例子:
- pattern = “abba”, str=“北京 杭州 杭州 北京” 返回 true
- pattern = “aabb”, str=“北京 杭州 杭州 北京” 返回 false
- 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模式相关推荐
- 【NLP】darmatch: 一个非常高效的多模式字符串匹配工具
darmatch 是一个非常高效的字符串匹配工具,支持正向/反向最大匹配分词和多模式字符串精确匹配: 仅包含头文件 (header-only) 基于双数组字典树 (double-array trie) ...
- 蛮力法在字符串匹配问题中的应用(JAVA)--朴素模式匹配算法
蛮力法在字符串匹配问题中的应用 字符串匹配问题通常是给定一个n个字符组成的串(称为文本),一个m(m<=n)个字符的串(称为模式),从文本中寻找匹配模式的子串.显然我们需要逐个匹配,这是蛮力算法 ...
- 《柔性字符串匹配》读书笔记(1)之--KMP算法(单模式串匹配、前缀匹配)
...
- 数据结构与算法 / 字符串匹配 / BF、PK 算法
零.前言 为了下面便于说明,先定义两个名词,分别是主串和模式串.在字符串 A 中查找字符串 B,则 A 为主串,B 为模式串. 假设,主串中字符数量为 L1,模式串的字符数量为 L2 . 一.BF 算 ...
- 字符串匹配之KMP---全力解析
PS:文章是转载的 下方的微信公号不是我的 是原作者的.附上原文链接:字符串匹配之KMP jeliy王的博客 近日,一同学面试被问到字符串匹配算法,结果由于他使用了暴力法,直接就跪了(现在想想这样的面 ...
- 字符串匹配KMP算法的理解(详细)
1. 引言 本KMP原文最初写于2年多前的2011年12月,因当时初次接触KMP,思路混乱导致写也写得混乱.所以一直想找机会重新写下KMP,但苦于一直以来对KMP的理解始终不够,故才迟迟没有修改本文. ...
- 字符串匹配值Sunday算法
实现strStr() 题目:实现 strStr() 实现 strStr() 函数.给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符 ...
- KMP算法-字符串匹配(浅显易懂)
KMP的经典思想就是:当出现字符串不匹配时,可以记录一部分之前已经匹配的文本内容,利用这些信息避免从头再去做匹配. 本篇将以如下顺序来讲解KMP, 什么是KMP KMP有什么用 什么是前缀表 为什么一 ...
- 子串查找(字符串匹配)
子串查询 首先,我们来定义两个概念,主串和模式串.我们在字符串 A 中查找字符串 B,则 A 就是主串,B 就是模式串.我们把主串的长度记为 n,模式串长度记为 m.由于是在主串中查找模式串,因此,主 ...
最新文章
- 无法启动python怎么办_解决python写的windows服务不能启动的问题
- cmd批处理命令与变量(下)
- WeChat小程序授权机制踩坑请求头中设置cookie保持session
- docker -v 覆盖了容器中的文件_10分钟让你理解 docker 容器中的 uid 和 gid
- 最新蚂蚁金服Java面试题:Docker+秒杀设计+RocketMQ+亿级数据设计
- 断言(Assertion)需要注意的一个地方
- JavaScript Module Pattern
- 常用CNN网络(AlexNet,GoogleNet,VGG,ResNet,DenseNet,inceptionV4)适合初学者
- python练习集100题_Python练习集100题
- STM32——库函数版——RGB8x8全彩点阵程序
- Androd传感器之陀螺仪传感器学习
- 知识付费的内容变现有哪些方式?
- 什么是动态代理?两种常用的动态代理方式
- kafka sparksteaming
- 游程编码(运行长度编码)
- Netty——ByteBuffer(ByteBuffer消息粘包、半包示例)
- beyond compare linux中文包,linux 下安装 Beyond Compare
- c语言传奇引擎源码,Ei3.0服务端引擎源代码+登陆网关+客户端插件
- 【图像分割】基于差分进化算法优化模糊熵实现多级图像阈值分割附matlab代码
- 黑马培训教学SSM整合中Security遇到的问题org.springframework.security.access.AccessDeniedException: Access is denied