标签:style io ar color os sp for 数据 div
++-+--+ -++--++
4
解题思路
一直在纠结有什么巧妙的方法,忽略了最笨的方法,看了大牛的代码才发现其实从左往右遍历才是最省事儿的。
从左到右,逐个比较,若有不同,标记此不同地点,并向右搜寻首个相同点,从该点开始挨个与左边位置交换并统计交换次数。
如果不匹配就往后找,找到第一个与之匹配的,这一点就是用到了贪心。
代码
#include<stdio.h>
#include<string.h>
char a[5100],b[5100];
int main()
{
int len,sum;
int numa,numb;
int i,j,k;
char c;
while(scanf("%s%s",a,b)!=EOF)
{
len=strlen(a);
numa=numb=0;
for(i=0;i<len;i++)
{
if(a[i]=='+')
numa++;
if(b[i]=='+')
numb++;
}
if(numa!=numb)//如果+-号数量不同肯定就没法满足了
printf("-1\n");
else
{
sum=0;
for(i=0;i<len;i++)
{//从左往右依次遍历
if(a[i]!=b[i])
{
for(j=i+1;;j++)
if(b[j]==a[i])
break;//如果不匹配,就往后找,找到最近一个匹配的
for(k=j;k>i;k--)
{
c=b[k];
b[k]=b[k-1];
b[k-1]=c;
sum++;
}
}
}
printf("%d\n",sum);
}
}
return 0;
}标签:style io ar color os sp for 数据 div
原文地址:http://blog.csdn.net/wangluoershixiong/article/details/41250623