问题:

小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;
    }

peixn
78 声望2 粉丝