NYOJ-+-字符串(贪心)

+-字符串


描述:
Shiva得到了两个只有加号和减号的字符串,字串长度相同。Shiva一次可以把一个加号和它相邻的减号交换。他想知道最少需要多少次操作才能把第一个字符串变换成第二个字符串。你现在要去帮助他完成那个这个问题。
输入:
多组测试数据,每组数据有两行,每行包含一个由”+”和”-“最成的字符串。每个子符串长度不超过5000。
输出:
仅一个整数,输出最少需要操作的次数。如果答案不存在,输出-1。
样例输入:
++-+--+
-++--++
样例输出:
4
解题思路:
需要注意的就是例如第一个位置的字符要与第三个未知的字符交换需要3-1次交换
程序代码:
#include<stdio.h>
#include<string.h>
#define N 5010
int main()
{
	char str1[N],str2[N],t;
	int i,j,len,len1,len2,sum;
	while(scanf("%s%s",str1,str2)!=EOF)
	{
		sum=0;
		len1=0;
		len2=0;
		len=strlen(str1);
		for(i=0;i<len;i++)
		{
			if(str1[i]=='+')
				len1++;
			if(str2[i]=='+')
				len2++;
		}
		if(len1!=len2)
		{
			printf("-1\n");
			continue;
		}	
		for(i=0;i<len;i++)
			if(str1[i]!=str2[i])
				for(j=i;j<len;j++)
					if(str1[i]!=str1[j])
					{
						t=str1[i];
						str1[i]=str1[j];
						str1[j]=t;
						sum+=j-i;
						break;
					}
		printf("%d\n",sum);	
	}
    return 0;
}


猜你喜欢

转载自blog.csdn.net/hezhiying_/article/details/80748875