計數二進位制子串

2021-08-18 16:39:08 字數 1056 閱讀 2940

題目描述:

給定乙個字串s,計算具有相同數量0和1的非空(連續)子字串的數量,並且這些子字串中的所有0和所有1都是組合在一起的。

重複出現的子串要計算它們出現的次數。

示例 1 :

輸入: "00110011"

輸出: 6

解釋: 有6個子串具有相同數量的連續1和0:「0011」,「01」,「1100」,「10」,「0011」 和 「01」。

請注意,一些重複出現的子串要計算它們出現的次數。

另外,「00110011」不是有效的子串,因為所有的0(和1)沒有組合在一起。

示例 2 :

輸入: "10101"

輸出: 4

解釋: 有4個子串:「10」,「01」,「10」,「01」,它們具有相同數量的連續1和0。

超時**(c#):

public class solution

for (int j = zerostart + 1; j < zeroend; j++)

}for (int j = onestart + 1; j < oneend; j++)

}if (!sign)

count++;

}length += 2;

}return count;

}之前的思路是暴力求解的思路,從字串的第一位到其length-字串的長度+1為止,求出0,1的開始和結束索引,然後再用迴圈在這個區間內判斷是否全部為0或1,如果是的話就count++,最後返回count的值就可以了,但是由於時間複雜度較高就會出現超時的情況,那麼就更改為下面的演算法:

更改後**:

public class solution

if(i==s.length-1)

}return count;

}更改後演算法的思路就是從字串的開始到末尾遍歷,求出連續的1或者0的個數(演算法中的a),若後面的數不同於前面的數,先記下當前的索引位置然後再求後面的數相同的個數(演算法中的b)直到再次遇到與當前數不同的數或者到末尾為止,然後比較a,b的大小,count+=兩個數中的小數,那麼count就是所求的答案。

計數二進位制子串

目錄 給定乙個字串 s,計算具有相同數量0和1的非空 連續 子字串的數量,並且這些子字串中的所有0和所有1都是組合在一起的。重複出現的子串要計算它們出現的次數。示例1 輸入 00110011 輸出 6 解釋 有6個子串具有相同數量的連續1和0 0011 01 1100 10 0011 和 01 請注...

計數二進位制子串

給定乙個字串 s,計算具有相同數量0和1的非空 連續 子字串的數量,並且這些子字串中的所有0和所有1都是組合在一起的。重複出現的子串要計算它們出現的次數。示例 1 輸入 00110011 輸出 6 解釋 有6個子串具有相同數量的連續1和0 0011 01 1100 10 0011 和 01 請注意,...

696 計數二進位制子串

給定乙個字串 s,計算具有相同數量0和1的非空 連續 子字串的數量,並且這些子字串中的所有0和所有1都是組合在一起的。重複出現的子串要計算它們出現的次數。示例 1 輸入 00110011 輸出 6 解釋 有6個子串具有相同數量的連續1和0 0011 01 1100 10 0011 和 01 請注意,...