标签: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