+-字符串
http://acm.nyist.net/JudgeOnline/problem.php?pid=915
- 描述
- Shiva得到了两个只有加号和减号的字符串,字串长度相同。Shiva一次可以把一个加号和它相邻的减号交换。他想知道最少需要多少次操作才能把第一个字符串变换成第二个字符串。你现在要去帮助他完成那个这个问题。
- 输入
- 多组测试数据
每组数据有两行,每行包含一个由”+”和”-“最成的字符串。每个子符串长度不超过5000。 - 输出
- 仅一个整数,输出最少需要操作的次数。如果答案不存在,输出-1。
- 样例输入
-
++-+--+ -++--++
- 样例输出
-
4
1 #include<stdio.h>/*AC我自己没做出来,看得题解*/ 2 #include<string.h> 3 int find(char *p,int n) 4 { 5 int i,count=0; 6 for(i=0;i<n;i++) 7 { 8 if(*(p+i)=='+') 9 count++; 10 } 11 return count; 12 } 13 int cha(int x,int y) 14 { 15 if(x>y) 16 return x-y; 17 return y-x; 18 } 19 int main() 20 { 21 char a[5005],b[5005]; 22 while(scanf("%s%s",a,b)==2) 23 { 24 int i,len,k=0,j,count=0; 25 len=strlen(a); 26 if((strlen(a)!=strlen(b))||find(a,strlen(a))!=find(b,strlen(b)))/*判断能否转换*/ 27 { 28 printf("-1\n"); 29 continue; 30 } 31 else/*找到a中第i个+位置w1和b第i个+位置w2,|w1-w2|即为移动位数*/ 32 { 33 for(i=0;i<strlen(a);i++) 34 { 35 if(a[i]!='+') 36 continue; 37 else 38 { 39 for(j=k;b[j]!='\0';j++) 40 { 41 if(b[j]=='+') 42 { 43 count+=cha(i,j); 44 k=j+1; 45 break; 46 } 47 } 48 } 49 } 50 51 } 52 printf("%d\n",count); 53 } 54 }