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

108 篇文章 0 订阅
80 篇文章 18 订阅
题目链接:?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. 如果有错误,还望大侠评论区指正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值