一个字符串包含许多形式为1(0+)1的模式,其中(0+)表示任何非空的连续0#序列。允许图案重叠。
例如,考虑字符串" 1101001",我们可以看到有两个连续的序列" 1(0)1"和" 1(00)1"其形式为1(0 +)1。
public class Solution {
static int patternCount(String s){
String[] sArray = s.split("1");
for(String str : sArray) {
if(Pattern.matches("[0]+", str)) {
count++;
}
}
return count;
}
public static void main(String[] args) {
int result = patternCount("1001010001");
System.out.println(result);//3
}
}
示例输入 100001abc101 1001ab010abc01001 1001010001
示例输出 2 2 3
但是我觉得将来可能还会失败,你可以根据要求帮助我优化我的代码
答案 0 :(得分:1)
首先:您没有声明count
变量。
无论如何,我认为更好的方法是:
static int patternCount(String s){
Pattern pattern = Pattern.compile("(?<=1)[0]+(?=1)");
Matcher matcher = pattern.matcher(s);
int count = 0;
while (matcher.find())
count++;
return count;
}
你使用更多的正则表达式和更少的逻辑;而且,就我所看到的而言,它更快(see test)。
如果您不知道,正则表达式中使用的技巧称为lookaround。更确切地说,(?<=1)
是积极的外观,(?=1)
是积极向前看。