原题
696.计数二进制子串
2020年8月10日 每日一题
题解
方法一
/*找到0,1交界处开始向两边扩展
*作者@v7fgg
*执行用时 :19 ms, 在所有 Java 提交中击败了23.04%的用户
*内存消耗 :39.8 MB, 在所有 Java 提交中击败了9.09%的用户
*2020年5月27日 10:15
*/
class Solution {
public int countBinarySubstrings(String s) {
int ans=0;
for(int i=0;i<s.length()-1;i++){
if(s.charAt(i)!=s.charAt(i+1)){
ans++;
int zuo=i;
int you=i+1;
while(zuo>=1&&you<s.length()-1){
if(s.charAt(zuo)==s.charAt(zuo-1)&&s.charAt(you)==s.charAt(you+1)){
ans++;
zuo--;
you++;
}
else{
break;
}
}
}
}return ans;
}
}
//on leetcode.com
//Runtime: 12 ms, faster than 27.61% of Java online submissions for Count Binary Substrings.
//Memory Usage: 40.1 MB, less than 6.25% of Java online submissions for Count Binary Substrings.
方法二
/*
@v7fgg
执行用时:18 ms, 在所有 Java 提交中击败了16.41%的用户
内存消耗:40.6 MB, 在所有 Java 提交中击败了7.69%的用户
2020年8月10日 7:28
*/
class Solution {
public int countBinarySubstrings(String s) {
int count=1;
List<Integer> list=new ArrayList<>();
for(int i=1;i<s.length();i++){
if(s.charAt(i)!=s.charAt(i-1)){
list.add(count);
count=1;
}
else{
count++;
}
}
list.add(count);
int ans=0;
for(int i=1;i<list.size();i++){
ans+=Math.min(list.get(i),list.get(i-1));
}
return ans;
}
}