我正在解决一个问题,我需要匹配目标字符串中给定单词的不同的不区分大小写的排列。
例如:
匹配的词:cAda
目标字符串:AbrAcadAbRa
此处,目标字符串S中可以找到的两种可能的排列是Acad和cadA。
我写过这样的话:
String pattern = "" ;
for(char ch : word.toCharArray()){
pattern = pattern + "(?=[\\s\\S]*(" + ch + "))" ;
}
pattern = "^" + pattern + "*$";
Pattern r = Pattern.compile(pattern, Pattern.CASE_INSENSITIVE);
它不起作用。
答案 0 :(得分:0)
正则表达式不是此任务的最佳工具。您必须为每个输入词生成一个新的正则表达式。并非不可能,但过于复杂。
你最好对目标词的字母进行排序,然后对输入词的每个n长度子串,对字母进行排序,看它们是否与排序的目标词匹配。
因此,给定目标词“cAda”,您将其排序为“Aacd”。
用户输入“AbrAcadAbRa”
所以你拿第一个4个字母的子串“AbrA”,将它排序为“AAbr”,然后根据已排序的目标进行检查。没有比赛。然后拿“brAc”,排序并检查。然后是“Acad”等。
有一些潜在的优化可以避免排序,但是对于小字符串,它们可能并不重要。