有一个字符串它的构成是词+空格的组合,如“北京 杭州 杭州 北京”, 要求输入一个匹配模式(简单的以字符来写), 比如 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 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 parrtDist = Arrays.stream(parrtStr).distinct().collect(Collectors.toList());

if(parrtDist.size() != dataDist.size()){

return false;

}

for (int i = 0; i < parrtDist.size(); i++) {

data = data.replace(dataDist.get(i),parrtDist.get(i));

}

if(!partt.equals(data.replace(" ",""))){

return false;

}

return true;

}

}

java输出abba_面试-字符串abba匹配问题-java8解决方案相关推荐

  1. java输出abba_java - 有限状态机搜索“ABBA” - 堆栈内存溢出

    我正在尝试编写一个while switch case kinda代码,用于对有限状态机进行建模,该有限状态机搜索As和Bs字符串以查看字符串"ABBA"是否存在. 当我输入&quo ...

  2. java输出数字与字符串_数字与字符串系列教材 (四)- Java 使用printf或format 进行格式化输出...

    步骤1:格式化输出 步骤2:printf和format 步骤3:换行符 步骤4:总长度,左对齐,补0,千位分隔符,小数点位数,本地化表达 步骤5:练习-黄鹤 步骤6:答案-黄鹤 步骤 1 : 格式化输 ...

  3. java 输出字符集合里的字_Java基础 -- 字符串(格式化输出、正则表达式)(示例代码)...

    一 字符串 1.不可变String String对象是不可变的,查看JDK文档你就会发现,String类中每一个看起来会修改String值的方法,实际上都是创建一个全新的String对象,以包含修改后 ...

  4. 输出字符串中匹配最多的括号数

    [java]输出字符串中匹配最多的括号数 例如: 1: (()) 输出2: 2:((()))()(()) 输出3: public class Demo { public static void mai ...

  5. java 字符串模糊匹配

    java正则表达式通过java.util.regex包下的Pattern类与Matcher类实现. Pattern类用于创建一个正则表达式,也可以说创建一个匹配模式,它的构造方法是私有的,不可以直接创 ...

  6. java取出字符串中的后四位_[原]Java面试题-将字符串中数字提取出来排序后输出...

    [Title][原]Java面试题-将字符串中数字提取出来排序后输出 [Date]2013-09-15 [Abstract]很简单的面试题,要求现场在纸上写出来. [Keywords]面试.Java. ...

  7. [笔试面试][code_by_hand]输出第二个字符串在第一个字符串中的连接次序

    1 #include <iostream> 2 #include <string> 3 #include <vector> 4 using namespace st ...

  8. java的lookingat_Java Matcher.lookingAt()部分匹配字符串

    首页 > 基础教程 > 正则表达式 > Matcher类 Java Matcher.lookingAt()部分匹配字符串 Matcher.lookingAt()对前面的字符串进行匹配 ...

  9. java 字符正则匹配算法_算法之字符串——正则表达式匹配

    难度 困难 请实现一个函数用来匹配包含'. '和'*'的正则表达式.模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(含0次).在本题中,匹配是指字符串的所有字符匹配整个模式 ...

最新文章

  1. javascript 通过键获取值
  2. 数据仓库中宽表的设计原则_实际项目中交互设计原则的运用
  3. java API(String类 和 StringBuffer类)
  4. 802.11无线网络部署方案对比分析
  5. [转]Vue基于vue-quill-editor富文本编辑器使用心得
  6. 中国各省会城市经纬度位置
  7. 编译原理 正则表达式_确定有穷自动机(DFA)_化简(最小化)
  8. R语言学习 文本处理
  9. html简单的文字自动出现效果,8个华丽的HTML5文字动画特效赏析
  10. 解决无法读取META-INF.services里面定义的类
  11. 通知栏通知不被清除通知所取消
  12. 机器学习--多层感知机、卷积神经网络、循环神经网络
  13. 关于ARGB_8888、ALPHA_8、ARGB_4444、RGB_565的理解
  14. 疫情风险地区查询数据库
  15. 据说只有高端机器才配运行K8S,网友:1G内存的渣渣跑起来了!
  16. Linux man tar cn翻译
  17. PLC之六部十层电梯整体框架
  18. 文档中如何插入计算机剪贴画,在Word 2007文档中插入剪贴画 -电脑资料
  19. Qt开发Svg Editor分享
  20. 论文精读——HOG特征提取

热门文章

  1. 【音频处理】乐器音符播放时电流处理 ( 使用均衡器调节低频 )
  2. Python面向过程编程主要知识
  3. 张坤(帮别人名字作诗)
  4. [GitHub][2014-05-16 14:00:07]eqq-python
  5. SharedObject对象聊天室
  6. echarts配置详解
  7. PostgreSQL 建表create table like including 用法
  8. 剑指核心-TaoCloud全闪SDS助力构建高性能云服务
  9. 小红书达人笔记投放攻略分享,纯干货
  10. 实现在网页上下载文件