关闭

NYOJ 915 +-字符串

124人阅读 评论(0) 收藏 举报
分类:

+-字符串

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

每组数据有两行,每行包含一个由”+”和”-“最成的字符串。每个子符串长度不超过5000。
输出
仅一个整数,输出最少需要操作的次数。如果答案不存在,输出-1。
样例输入
++-+--+ 
-++--++ 
样例输出
4
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn = 5000 + 10;
char str1[maxn], str2[maxn];
int main()
{
    while(scanf("%s%s", str1, str2) != EOF){
        int len = strlen(str1);
        int sum1 = 0, sum2 = 0;
        for (int i = 0; i < len; i++){
            if (str1[i] == '+')
                sum1++;
            if (str2[i] == '+')
                sum2++;
        }
        if (sum1 != sum2){
            printf("-1\n");
            continue;
        }
        int ans = 0;
        for (int i = 0; i < len; i++){
            if (str1[i] != str2[i]){
                for (int j = i + 1; j < len; j++){
                    ans++;
                    if (str1[j] == str2[i]){
                        str1[j] = str1[i];
                        break;
                    }
                }
            }
        }
        printf("%d\n", ans);
    }
    return 0;
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:210662次
    • 积分:5825
    • 等级:
    • 排名:第4377名
    • 原创:396篇
    • 转载:57篇
    • 译文:0篇
    • 评论:14条