nyoj-915-+-字符串

来源:互联网 发布:淘宝主图尺寸怎么调整 编辑:程序博客网 时间:2024/06/08 11:31

+-字符串

时间限制:1000 ms | 内存限制:65535 KB
难度:1
描述
Shiva得到了两个只有加号和减号的字符串,字串长度相同。Shiva一次可以把一个加号和它相邻的减号交换。他想知道最少需要多少次操作才能把第一个字符串变换成第二个字符串。你现在要去帮助他完成那个这个问题。
输入
多组测试数据

每组数据有两行,每行包含一个由”+”和”-“最成的字符串。每个子符串长度不超过5000。
输出
仅一个整数,输出最少需要操作的次数。如果答案不存在,输出-1。
样例输入

++-+--+ -++--++

样例输出

4

分析:
已加号为例,改动加号的位置,来使字符串同,
记录下每个加然后相减取绝对值就得出这个加号移动的步数,最后求和就可以了。
代码:

#include<iostream>#include<cstdio>#include<cmath>#include<cstring>using namespace std;int main(){    char a[5010],b[5010];    int aa[5010],bb[5010];//记录+的位置    while(~scanf("%s%s",a,b))    {        int la=strlen(a),ta=0;        for(int i=0;i<la;i++)        {            if(a[i]=='+')            {                aa[ta++]=i;            }        }        int lb=strlen(b),tb=0;        for(int i=0;i<lb;i++)        {            if(b[i]=='+')            {                bb[tb++]=i;            }        }        if(lb!=la||ta!=tb)        {            printf("-1\n");            continue;        }        int ans=0;        for(int i=0;i<ta;i++)        {            ans+=fabs(aa[i]-bb[i]);        }        printf("%d\n",ans);    }    return 0;}
原创粉丝点击