1. 程式人生 > 其它 >#力扣 LeetCode696. 計數二進位制子串 @FDDLC

#力扣 LeetCode696. 計數二進位制子串 @FDDLC

技術標籤:演算法&資料結構

題目描述:

https://leetcode-cn.com/problems/count-binary-substrings/

Java程式碼:

class Solution {
    public int countBinarySubstrings(String s) { //s.length 在1到50,000之間
        int ans=0,cur=1,pre=0;
        for(int i=s.length()-2;i>=0;i--){
            if(s.charAt(i)==s.charAt(i+1))cur++;
            else{
                ans+=Math.min(cur,pre);
                pre=cur;
                cur=1;
            }
        }
        return ans+Math.min(cur,pre);
    }
}

Java程式碼二:

class Solution {
    public int countBinarySubstrings(String s) { //s.length 在1到50,000之間
        int ans=0,cur=1,pre=0;
        for(int i=s.length()-2;i>=0;i--){
            if(s.charAt(i)==s.charAt(i+1))cur++;
            else{
                pre=cur;
                cur=1;
            }
            if(cur<=pre)ans++;
        }
        return ans;
    }
}

Java程式碼三:

class Solution {
    public int countBinarySubstrings(String s) { //s.length 在1到50,000之間
        int ans=0,cur=1,pre=0,flag;
        for(int i=s.length()-2;i>=0;i--){
            flag=s.charAt(i)^s.charAt(i+1)^1; //同或:同1異0
            pre=flag*pre+(flag^1)*cur;
            cur=cur*flag+1;
            ans+=(pre+50000)/(cur+50000); //pre>=cur,+1;否則,+0
        }
        return ans;
    }
}