【问题标题】:how to match the pattern if the pattern is abba and there will be given a single string that is "redbluebluered" which matches the pattern如果模式是abba,如何匹配模式,并且将给出一个匹配模式的“redbluebluered”字符串
【发布时间】:2015-11-19 15:26:50
【问题描述】:

我昨天参加了校园驾驶的技术轮次,要求解决这个问题。我没有接近这个问题的解决方案,我从那里被拒绝了,现在我仍在尝试解决这个问题但无法解决。我想知道如何解决这个问题。面试官说不会有测试字符串中的空格,也是一个字符串。

如果会有输入字符串模式会abba。 那么匹配模式将是 1) 猫狗狗猫 2) 红蓝蓝红 3) noyesyesno

不匹配的模式将是 1) 猫狗猫 2) 红蓝红 3) 是的,是的

(对不起我的英语不好)

谢谢。

【问题讨论】:

    标签: regex string-matching


    【解决方案1】:

    如果您需要一个不使用特定词的通用解决方案,这可能就是您所追求的:

    (\w+)(\w+)\2\1
    

    https://regex101.com/r/hP8lA3/1

    它的效率不是很高,但它会尝试贪婪地匹配两个词组,然后使用backreferences 确保它们先是第二组,然后是第一组。

    您可以更通用地匹配两组 any 字符(除了换行符):(.+)(.+)\2\1

    这是使用 C# 解决全部问题的一种可能解决方案:

    private bool matcher(string pseudoPattern, string text) {
        string regexPattern = "^";
        var uniqueParts = new List<char>();
    
        foreach (char part in pseudoPattern.ToCharArray())
            if (uniqueParts.Contains(part)) {
                int backReference = uniqueParts.FindIndex(p => p == part) + 1;
    
                regexPattern += @"\" + backReference;
            }
            else {
                uniqueParts.Add(part);
    
                regexPattern += @"(\w+)";
            }
    
        regexPattern += "$";
    
        var regex = new Regex(regexPattern);
    
        return regex.Match(text).Success;
    }
    

    【讨论】:

    • 但是有一个问题,面试官想要的程序需要两个字符串,第一个是模式,第二个是testString。我们不能用正则表达式来做,因为我们有不同的每次执行时的输入模式。谢谢
    • @TariqueShamim - 它与这个问题有关,还是与面试官分开的问题?
    • 这是实际问题。
    • :- 他希望我创建一个程序来检查多个模式和 testString。
    • @TariqueShamim - 它是什么语言的? 'abba' 是输入模式的实际格式吗?还有什么其他例子?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-11
    相关资源
    最近更新 更多