NOJ [1521] +-字符串

  • 问题描述
  • Shiva得到了两个只有加号和减号的字符串。Shiva一次可以把一个加号和它相邻的减号交换。他想知道最少需要多少次操作才能把第一个字符串变换成第二个字符串。你现在要去帮助他完成那个这个问题。

  • 输入
  • 输入数据有两行,每行包含一个由”+”和”-“最成的字符串。每个子符串长度不超过5000。
  • 输出
  • 仅一个整数,输出最少需要操作的次数。如果答案不存在,输出-1。
  • 样例输入
  • ++-+--+ 
    -++--++ 
    
  • 样例输出
  • 4
  • 从后往前找,如果不匹配,那么在往前找,直到找到匹配的,由于本题比较特殊,只有两个字符,所以当找到以后,可以直接交换而不需要移动,如果要移动,那么时间复杂度就又高了,但本题不需要

#include<stdio.h>
#include<string.h>


char a[5010],b[5010];

int main()
{
while(~scanf("%s",a))
{
scanf("%s",b);
if(strlen(a)!=strlen(b))
printf("-1\n");
else
{
int len=strlen(a);
int i=len-1,j;
int cnt=0;
while(i>=0)
{
if(a[i]==b[i])
i--;
else
{
for(j=i-1;j>=0;j--)
{
if(a[j]==b[i])
{
char temp=a[j];
a[j]=a[i];
a[i]=temp;
cnt+=i-j;
break;
}
}
i--;
}
}
printf("%d\n", cnt);
}
}
return 0;
}


你可能感兴趣的:(NOJ [1521] +-字符串)