問題:
小B研究包含“.”和ASCII碼的字串。
目標是消除字串中連續出現的“.”。
假定,一次可以用一個“.”置換連續的兩個“.”。
問,對於任一字串,在經過某些字元置換後,最少需要幾次置換,來消除所有的連續“.”。
輸入:第一行是兩個整數n和m,n是字串長度(1<=n,m<=10000).第二行是字串。接下來是m行的置換資訊:每一行是整數x和字元c。
輸出:對應於輸入的m行的置換結果,輸出所需的最小置換次數。
樣例輸入:
10 3
.b..bc….
1 g
3 k
9 u
4 4
.bc.
2 .
3 .
2 b
1 d
樣例輸出:
4
3
1
1
3
1
1
以下是我寫的程式碼。請多指教。
#include<iostream>
using namespace std;
int fun(char *s,int n){
int len=0;
int *t;
t= (int *)malloc(n*sizeof(int));
for(int i=0;i<n;i++){
t[i]=0;
if((s[i]==`.`)&&(i>0)){
t[i]=t[i-1]+1;
}
}
for(int i=0;i<n;i++)
if((t[i]>0)&&(t[i+1]==0))
len+=t[i];
return len;
}
int main(){
cout<<fun(".b..bz....",10)<<endl;
int n,m;
while(cin>>n>>m){
char * s;
s=(char *)malloc(n*sizeof(char));
cin>>s;
//for(int i=0;i<n;i++)cin>>s[i];
for(int i=0;i<m;i++){
int x;
char c;
cin>>x>>c;
s[x-1]=c;
int f=fun(s,n);
cout<<f<<endl;
}
}
return 0;
}