题意是找出一个区间里子串中c[i] == c[i+1]个数
每次查询都暴搜,Java跟C都超时
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNextLine()) {
String s = in.nextLine();
char[] c = s.toCharArray();
int n = 0;
if (in.hasNextInt())
n = in.nextInt();
while (in.hasNextInt()) {
int l = in.nextInt(), r = in.nextInt(), ans = 0, k = 0;
for (int j = l-1; j < r-1; j++) {
if (c[j] == c[j+1])
k++;
else {
ans += k;
k = 0;
}
}
ans += k;
System.out.println(ans);
}
}
}
}
dp先储存状态,之后每次查询直接返回结果
还以为不同语言限制不同,结果还是Java超时,C过了
#include<bits/stdc++.h>
using namespace std;
string s;
int n, l, r;
int main()
{
while (cin >> s) {
cin >> n;
int dp[s.length()];
memset(dp, 0, sizeof(dp));
for (int i = 1; i < s.length(); i++)
dp[i] = s[i] == s[i-1] ? dp[i-1] + 1 : dp[i-1];
for (int i = 0; i < n; i++) {
cin >> l >> r;
printf("%d\n", dp[r-1] - dp[l-1]);
}
}
return 0;
}