模式计数在0' s和stat之间,以" 1"结束。

时间:2017-06-13 12:41:58

标签: java regex string pattern-matching

一个字符串包含许多形式为1(0+)1的模式,其中(0+)表示任何非空的连续0#序列。允许图案重叠。

例如,考虑字符串" 1101001",我们可以看到有两个连续的序列" 1(0)1"和" 1(00)1"其形式为1(0 +)1。

enter image description here

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

但是我觉得将来可能还会失败,你可以根据要求帮助我优化我的代码

1 个答案:

答案 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)是积极向前看。