匹配最长子串的模式匹配
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 表达式。所以这将匹配 D
和 U
的任何序列。
如果你想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
的参数,因为您从未使用过它
我有这个正则表达式 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 表达式。所以这将匹配 D
和 U
的任何序列。
如果你想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
的参数,因为您从未使用过它