看到难度为1的题目本不想水,但是我愣是对着c[j]==1的赋值代码找了半天错误,果真自己还是太水。。
题目思路:写完后看了下网上的代码,有些是有不同遇到不同则计数,而我是找加号,然后位置做差。。
然后用一个visit数组记录访问,基本都差不多。。至于是否会输出-1,我比较的是加减号的数量,然而有些代码是根据最终的visit数组来判断,,基本差不多吧
附代码
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
int main()
{
char a[5010],b[5010];
int c[5010];
int aplus,asub,bplus,bsub,ans;
while(~scanf("%s %s",a,b))
{
ans=0;
int alen=strlen(a);
int blen=strlen(b);
memset(c,0,sizeof(c));
aplus=bplus=asub=bsub=0;
for(int i=0;i<alen;i++)
{
if(a[i]=='+')
{
aplus++;
}
if(a[i]=='-')
asub++;
}
for(int i=0;i<blen;i++)
{
if(b[i]=='+')
bplus++;
if(b[i]=='-')
bsub++;
}
//printf("%d %d %d %d\n",aplus,asub,bplus,bsub);
if(aplus==bplus&&asub==bsub)
{
for(int i=0;i<alen;i++)
{
if(a[i]=='+')
{
for(int j=0;j<blen;j++)
{
if(a[i]==b[j]&&c[j]==0)
{
// printf("%d ",j);
ans+=abs(j-i);
c[j]=1;
break;
}
}
//printf("%d ",ans);
}
}
printf("%d\n",ans);
}
else
printf("-1\n");
}
return 0;
}