nyoj 915 -+字符串

来源:互联网 发布:java内部类例子 编辑:程序博客网 时间:2024/06/03 18:58

+-字符串

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

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

解题思路:字符串ch1和ch2进行一一对比, 当遇到不相同, 进行比较ch1下一个字符,直到相同位置, 字符串ch1的位置减去ch2当前的位置,就是字符串需要移动的步数,直到查找到字符串尾部。把移动的步数相加就是总共需要移动的步数。

AC代码:

# include <stdio.h># include <string.h>int main(void){char ch1[1005];char ch2[1005];int i, j;while (scanf("%s %s", ch1, ch2) != EOF){int len1 = strlen(ch1);int sum = 0;int ok = 0;for (i = 0; i < len1; i++){if (ch1[i] != ch2[i]){for (j = i + 1; j < len1; j++){if (ch1[j] == ch2[i]){break;}}if (j == len1){ok = -1;}sum += (j - i);ch1[j] = ch1[i];  //进行移动}}if (!ok){printf("%d\n", sum);}else{printf("-1\n");}}return 0;}



0 0
原创粉丝点击