输入字符串,字符串里只有‘.‘或者’#‘,输入n,接下来n组数据,输入l,r询问字符串中的元素,第l个到第r-1个元素,和它后一个元素相同的元素的个数。
建一个dp数组。
从第二个元素开始找,如果s[i]==s[i-1] 那么dp[i]=dp[i-1]+1;否则dp[i]=dp[i-1];
如果 s[l]==s[l-1] 那么需要在结果值-1
需要注意的地方就是,输入的标号和存字符串的时候的标号。
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
char s[100005];
int dp[100005];
int main()
{
scanf("%s",s+1);
int z=strlen(s+1);
dp[0]=dp[1]=0;
for(int i=2;i<=z;i++)
dp[i]=(s[i]==s[i-1])?dp[i-1]+1:dp[i-1];
int n;
cin>>n;
int l,r;
while(n--)
{
cin>>l>>r;
int ans=dp[r]-dp[l-1];
if(l!=1&&s[l]==s[l-1]) ans-=1;
cout<<ans<<endl;
}
return 0;
}