链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
题目描述
小红定义一个字符串是好串,当且仅当该字符串任意一对相邻字符都不同。
现在小红拿到了一个01串,请你帮小红求出有多少个长度不小于2的连续子串是好串。
输入描述:
一个长度不超过200000的字符串,仅由'0'和'1'组成。
输出描述:
输出相邻字符均不同的连续子串数量。
示例1
输入
01011
输出
6
代码:
import java.util.Scanner; // 导入Scanner类,用于获取用户输入
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in); // 创建Scanner对象,用于读取控制台输入
String s = in.next(); // 读取一个字符串
long ans = 0; // 初始化答案变量为0
long p = 0; // 初始化连续不同字符的计数器为0
// 遍历字符串中的每个字符,除了最后一个字符
for(int i=0; i<s.length()-1; i++){
// 如果当前字符与下一个字符不相同
if(s.charAt(i) != s.charAt(i+1)){
p++; // 增加连续不同字符的计数器
} else {
// 如果当前字符与下一个字符相同,计算到目前为止的连续不同字符子串的数量
ans += (p*(p+1))/2;
p = 0; // 重置连续不同字符的计数器
}
}
// 输出最终结果,加上最后一组连续不同字符子串的数量
System.out.println(ans + (p*(p+1))/2);
}
}