zoukankan      html  css  js  c++  java
  • LeetCode 696. 计数二进制子串 Java

    统计连续出现的 0 和 1 出现的次数,保存到一个counts数组中,如00110110,对应的数组为{2,2,1,2,1},所能组成子串的个数为min{u,v},u和v分别代表0和1的个数或者1和0的个数。应该返回2+1+1+1=5

    法1

    class Solution {
        public int countBinarySubstrings(String s) {
            //维护一个保存相邻的0和1出现次数的数组
            List<Integer> counts = new ArrayList<>();
            int p = 0;
            int n = s.length();
            //建立保存出现次数的数组
            while(p < n){
                char c = s.charAt(p);
                int count = 0;
                while(p<n && s.charAt(p)== c){
                    p++;
                    count++;
                }
                counts.add(count);
            }
            int ans = 0;
            for(int i=1;i<counts.size();i++){
                ans += Math.min(counts.get(i-1),counts.get(i));
            }
            return ans;
        }
    }
    

    法2,一点优化,只保存i的前一个count

    //省去一个counts数组
    class Solution {
        public int countBinarySubstrings(String s) {
            int p = 0, n = s.length(), last = 0, ans = 0;
            while (p < n) {
                char c = s.charAt(p);
                int count = 0;
                while (p < n && s.charAt(p) == c) {
                    ++p;
                    ++count;
                }
                ans += Math.min(count, last);
                last = count;
            }
            return ans;
        }
    }
    
  • 相关阅读:
    「NOI2017」蔬菜 解题报告
    线性代数
    idea创建maven的web工程
    logback和slf4j的使用之logger使用
    英雄之言 罗隐
    论英雄
    英雄--偶得佳文不知出处
    日志
    延迟加载线程安全的单例--最佳方式,通过内部类
    linux下安装jdk8
  • 原文地址:https://www.cnblogs.com/yu-jiawei/p/13468916.html
Copyright © 2011-2022 走看看