nyoj 915 +-字符串

来源:互联网 发布:淘宝一楼土木人怎么样 编辑:程序博客网 时间:2024/06/06 00:40

+-字符串

时间限制:1000 ms  |  内存限制:65535 KB
难度:1
描述
Shiva得到了两个只有加号和减号的字符串,字串长度相同。Shiva一次可以把一个加号和它相邻的减号交换。他想知道最少需要多少次操作才能把第一个字符串变换成第二个字符串。你现在要去帮助他完成那个这个问题。
输入
多组测试数据

每组数据有两行,每行包含一个由”+”和”-“最成的字符串。每个子符串长度不超过5000。
输出
仅一个整数,输出最少需要操作的次数。如果答案不存在,输出-1。
样例输入
++-+--+ -++--++ 
样例输出
4


这道题不难,但是真变态!!!

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

int main()
{
     int h1,h2,i,sum,j;char s1[5005],s2[5005],t;
    while(~scanf("%s%s",s1,s2))
    {
         sum=0;
         h1=strlen(s1);h2=strlen(s2);
         if(h1!=h2)
        sum=-1;
        else
    {
        for(i=0;i<h1;i++)
        {
            if(s1[i]!=s2[i])
            {
                for(j=i+1;j<h1;j++)
                {
                    if(s1[j]==s2[i])
                    {
                        while(j>i)
                        {
                            t=s1[j];
                            s1[j]=s1[j-1];
                            s1[j-1]=t;
                            j--;
                            sum++;
                        }
                        break;
                    }
                }
            }
        }
    printf("%d\n",sum);
    }
    }
    return 0;
}

思路:就是逐个比较,当俩数组的第i个符号不相等时,那么再写一层循环,往后找,s1 中第j个和字符,和s2 中的第i个字符相等,然后,逐个交换,纪录步数;然后依次寻找,直到h1 为止。
0 0
原创粉丝点击