WUSTOJ 1315: 杜学霸和谭女神(Java)

题目链接:🔗1315: 杜学霸和谭女神

Description

大家都知道俱乐部的杜学霸和谭女神的成绩都特别好,他们想帮助俱乐部的其他人通过考试。考试的题目需要解决如下的这个IT问题。
现有一串字符 string = s1s2s3…sn(n是这个字符串的长度),字符串只包含".“和”#"。接下来有m个问题。每一个问题都有两个整数li,ri。需要求出在区间中有多少个p(li<=p<ri),满足 s[p]=s[p+1]。
请帮助杜学霸和谭女神解决这个问题。

Input

第一行包含一串长度为n的字符(2<=n<=10^5)。保证字符串只包含".“和”#"。
接下来一行为一个整数m(1<=m<=10^5)—问题的数量。接下来的m行每一行有两个整数li,ri(1<=li<=ri<=n)

Output

输出m个数字,对应输入的每一个问题的答案。

Sample Input

......
4
3 4
2 3
1 6
2 6
#..###
5
1 3
5 6
1 5
3 6
3 4

Sample Output

1
1
5
4
1
1
2
2
0

分析💬

用一个byte型数组来表示字符串的邻位是否相同,然后累和即可。

特别容易超时。

代码💻

/**
 * Time 2633ms
 * @author wowpH
 * @version 1.1
 * @date 2019年6月19日下午8:19:55
 * Environment:	Windows 10
 * IDE Version:	Eclipse 2019-3
 * JDK Version:	JDK1.8.0_112
 */

import java.io.InputStreamReader;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(new InputStreamReader(System.in));
		String string;
		int questionNumber, left, right, count, length;
		byte[] ans;
		
		while (sc.hasNext()) {
			string = sc.next();
			length = string.length();// 字符串长度
			ans = new byte[length + 1];// 下标从1开始
			for (int i = 1; i < length; ++i) {
				if (string.charAt(i) == string.charAt(i - 1)) {
					ans[i] = 1;// 转换为数字
				}
			}
			
			questionNumber = sc.nextInt();// 问题数
			while ((questionNumber--) > 0) {
				left = sc.nextInt();
				right = sc.nextInt();
				count = 0;// 计数
				for (int i = left; i < right; ++i) {
					count += ans[i];
				}
				System.out.println(count);// 输出
			}
		}
		sc.close();
	}
}

版权声明

  1. 转载、参考、引用必须在首页添加如下文字:
    [WUSTOJ 1315: 杜学霸和谭女神(Java)——wowpH](https://blog.csdn.net/pfdvnah/article/details/92847640)
  2. 代码原创,公开引用不能删除首行注释(作者,版本号,时间等信息);
  3. 如果有疑问欢迎评论区留言,尽量解答;
  4. 如果有错误,还望大侠评论区指正。

posted @ 2019-06-19 22:12  wowpH  阅读(272)  评论(0)    收藏  举报