匹配最长子串的模式匹配

Pattern matching to match longest substring

我有这个正则表达式 D+U

它应该为以下字符串匹配一次 UDDDUDUU 但对于 Java 它匹配三次。它匹配 DDDU DU。我正在使用 https://regex101.com/ 检查我的正则表达式,它应该只匹配一次,即 DDDU.

我正在尝试解决这个 HackerRank 挑战。我也在尝试使用 Pattern,因为我想练习使用那些 类.

我到底做错了什么?

这是我的代码:

static int match(int n, String s) {
    Matcher matcher = Pattern.compile("D+U").matcher(s);
    int count = 0;
    int i = 0;
    while (matcher.find(i)) {
        count++;
        i = matcher.end() + 1;
    }
    return count;
}

正则表达式 + 匹配一个或多个前面的 character/regular 表达式。所以这将匹配 DU 的任何序列。

如果你想return你可以做的最长匹配:

static String match(String s) {
    ArrayList<String> matches = new ArrayList<>();
    Matcher matcher = Pattern.compile("D+U").matcher(s);
    int i = 0;
    while (matcher.find(i)) {
       matches.add(matcher.group());
       i = matcher.end();
    }   
    return Collections.max(matches, Comparator.comparing(c -> c.length()));
}

其中(带有UDDDUDUU的测试用例)returns DDDU。另请注意,我删除了 n 的参数,因为您从未使用过它