我昨天参加了校园驾驶的技术回合,并要求解决这个问题。我没有接近解决这个问题,我被拒绝了,现在我仍在努力解决这个问题,但无法解决。我想知道如何解决这个问题。面试官说没有测试字符串中的空格,也是一个字符串。
如果有输入字符串模式将abba。 然后匹配模式 1)catdogdogcat 2)redbluebluered 3)noyesyesno
并不匹配模式 1)catdogcat 2)redbluered 3)yesnoyes
(抱歉我的英语不好)
谢谢。答案 0 :(得分:3)
如果你需要一个不使用特定词语的通用解决方案,那么这可能是你所追求的:
(\w+)(\w+)\2\1
https://regex101.com/r/hP8lA3/1
效率不高但它会尝试贪婪地匹配两个单词组,然后使用backreferences确保首先跟随第二组,然后是第一组。
你可以使它更加通用,以匹配两组任何字符(除了换行符):(.+)(.+)\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;
}