美文网首页不合格的程序员程序员
面试-字符串匹配ABBA模式

面试-字符串匹配ABBA模式

作者: a77118d36d9b | 来源:发表于2017-09-22 10:19 被阅读60次

如题,有一个字符串它的构成是词+空格的组合,如“北京 杭州 杭州 北京”, 要求输入一个匹配模式(简单的以字符来写), 比如 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()){
            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;
    }
}

相关文章

  • 面试-字符串匹配ABBA模式

    如题,有一个字符串它的构成是词+空格的组合,如“北京 杭州 杭州 北京”, 要求输入一个匹配模式(简单的以字符来写...

  • 模式匹配

    模式匹配之字符串 模式匹配之匹配类型 模式匹配之匹配数组、元组、集合 模式匹配之样例类 模式匹配之偏函数

  • Python算法-字符串(String)

    字符串匹配问题字符串匹配(String Matching):又称为模式匹配(Pattern Matching)。可...

  • 一些有关算法的

    字符串模式匹配算法 字符串的KMP算法详解部分匹配表(即)向右移一位就可以得到next数组。字符串模式匹配算法 R...

  • 字符串匹配

    字符串匹配(string matching)也称字符串查找(string searching)或模式匹配(patt...

  • Python 正则表达式

    正则表达式模式 模式描述^匹配字符串的开头$匹配字符串的末尾。.匹配任意字符,除了换行符,当re.DOTALL标记...

  • AC自动机实现屏蔽单词

    多模式自动匹配AC自动机 KMP是多模式匹配算法, 解决的是一个字符串匹配多个模式串的问题, 该字符串往往短于或者...

  • R学习笔记(7):使用stringr处理字符串(2)

    目标:结合正则表达式,实现 确定与某种模式匹配的字符串找出匹配位置提取匹配内容替换匹配内容基于匹配拆分字符串 1....

  • Python的正则表达式

    模式介绍 基本用法 ^: 匹配字符串的开头,如:^很 $: 匹配字符串的末尾,如:蓝$ .: 匹配除了换行符外的任...

  • 四.Shiro - 拦截器配置

    例子 一 . url 匹配模式 支持Ant风格模式 ? : 匹配一个字符 * : 匹配零个或多个字符串 ** : ...

网友评论

    本文标题:面试-字符串匹配ABBA模式

    本文链接:https://www.haomeiwen.com/subject/huwxextx.html