0

我遇到过针对不同问题的正则表达式,但我找不到 regex 来平衡字符串中的字符。

我遇到了一个问题,要查找字符串是否平衡。例如:aabbccdd是平衡的,因为字符以偶数重复但aabbccddd不是平衡的,因为ddd以奇数模式重复。这适用于所有输入不特定的字符a,b,c and d。如果我将输入作为12344321or 123454321,它应该分别返回平衡和不平衡的结果。

如何使用正则表达式找到余额。我们应该使用什么类型的正则表达式来查找字符串是否平衡?

Edit:

我试图仅使用正则表达式找到解决方案,因为问题需要以正则表达式模式回答。如果没有明确提及正则表达式,我将使用任何其他解决方案来实现

4

2 回答 2

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();
}
于 2017-06-12T09:17:22.597 回答
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;
}

编辑: 用于指向正则表达式的存在

仅针对两个字符的有限自动操作的参考。从最左边开始,以双圈获胜。每个状态由迄今为止具有奇数的字符集命名。

在此处输入图像描述

于 2017-06-12T09:18:46.830 回答