我遇到了不同问题的正则表达式,但我找不到正则表达式来平衡字符串中的字符。
我遇到了一个问题,找出一个字符串是否平衡。
例如:aabbccdd
是平衡的,因为字符以偶数重复
但是aabbccddd
不是平衡的,因为ddd
在奇数模式下重复。这适用于所有字符都不提供特定a,b,c and d
的输入。如果我将输入设为12344321
或123454321
,则应分别返回平衡和不平衡结果。
如何使用正则表达式查找余额。我们应该使用什么类型的正则表达式来查找字符串是否平衡?
Edit:
我试图仅使用正则表达式找到解决方案,因为问题需要以正则表达式模式回答。如果没有明确提到正则表达式,我会使用任何其他解决方案实现
答案 0 :(得分:1)
我认为你不能用正则表达式做到这一点。你为什么需要使用它们? 我试过这个:它有效,而且非常简单
static boolean isBalanced(String str) {
ArrayList<Character> odds = new ArrayList<>(); //Will contain the characters read until now an odd number of times
for (char x : str.toCharArray()) { //Reads each char of the string
if (odds.contains(x)) { //If x was in the arraylist we found x an even number of times so let's remove it
odds.remove(odds.indexOf(x));
}
else {
odds.add(x);
}
}
return odds.isEmpty();
}
答案 1 :(得分:1)
存在这个问题的正则表达式,但不会加速任何事情并且会完全混乱。准备NFA更容易,然后切换到REGEX。不过,这不是合适的工具。
public static void main(String args[]) {
String s = args[0];
int[] counter = new int[256];
for (int i = 0; i < s.length(); i++) {
counter[s.charAt(i)]++;
}
if (validate(counter)) {
System.out.println("valid");
} else {
System.out.println("invalid");
}
}
public static boolean validate(int[] tab) {
for (int i : tab) {
if (i%2 == 1) {
return false;
}
}
return true;
}
编辑: 指出正则表达式存在
仅限两个字符的有限自动化参考。从左边开始,用双圈赢。每个状态由到目前为止具有奇数的字符集命名。