正则表达式按顺序排列三个字符,不在字符串中重复

时间:2014-04-15 16:12:15

标签: java regex regex-negation

我尝试使用正则表达式来解决下面的问题,但是不能(最后使用其他方法):

http://community.topcoder.com/stat?c=problem_statement&pm=13006&rd=15846

给定一个字符串,您必须检查是否按此顺序包含字符CAT,并且每个字符只出现一次。它可以是这些字符之间的其他字符。 例如:

CTA -> false
XCYAZTX -> true
ACBBAT -> false
CATT -> false
CCAT -> false
CAAT -> false
CAT -> true

所以,它将是:

public String getAnswer(String S) {
   if(S.matches("pattern???")) return "Possible";
   return "Impossible";
}

有人知道使用的模式并可以分享吗?

2 个答案:

答案 0 :(得分:3)

你使用这样的模式:

^[^CAT]*C[^CAT]*A[^CAT]*T[^CAT]*$

答案 1 :(得分:3)

这个正则表达式适合你:

"(?m)^[^CAT]*C[^CAT]*A[^CAT]*T[^CAT]*$"

Working Demo