NYOJ 915 +-字符串
来源:互联网 发布:java 执行命令 带参数 编辑:程序博客网 时间:2024/05/31 13:16
+-字符串
时间限制:1000 ms | 内存限制:65535 KB
难度:1
- 描述
- Shiva得到了两个只有加号和减号的字符串,字串长度相同。Shiva一次可以把一个加号和它相邻的减号交换。他想知道最少需要多少次操作才能把第一个字符串变换成第二个字符串。你现在要去帮助他完成那个这个问题。
- 输入
- 多组测试数据
每组数据有两行,每行包含一个由”+”和”-“最成的字符串。每个子符串长度不超过5000。 - 输出
- 仅一个整数,输出最少需要操作的次数。如果答案不存在,输出-1。
- 样例输入
++-+--+ -++--++
- 样例输出
4
解题思路:
先找出两个数组中字符不同的对应位,标记为i,再继续再原字符串中找到与另一字符串i位相同的字符,记录下标为j。则移动第一个
字符所需的次数为j-i次,然后把原字符串的i位赋值给j位。继续检索下去,直到两个字符串完全相同。
代码如下:
#include<stdio.h>#include<string.h>//char a[5100],b[5100]; ***注意把数组定义在外面会CompileError(编译错误) int main(){int i,j,n,len,m1,m2;char a[5100],b[5100];while(scanf("%s%s",a,b)!=EOF){m1=0;m2=0;len=strlen(a);for(i=0;i<len;i++){if(a[i]=='+') m1++;if(b[i]=='+') m2++;}if(m1!=m2){printf("-1\n");continue;}n=0;for(i=0;i<len;i++){if(a[i]!=b[i]){for(j=i+1;j<len;j++)//每次都找最近的相同的字符下标 {if(a[j]==b[i])break;}n=n+(j-i);a[j]=a[i];}}printf("%d\n",n);}return 0;}
0 0
- nyoj 915 +-字符串 【字符串】
- nyoj 915 +-字符串【字符串】
- nyoj-915-+-字符串
- NYOJ 915 +-字符串
- NYOJ 915 +-字符串
- NYOJ-915 +-字符串
- NYOJ 915 +-字符串
- NYOJ 915 +-字符串
- NYOJ 915 +-字符串【贪心】
- nyoj 915 +-字符串
- NYOJ 915 +-字符串
- NYOJ 题目915+-字符串
- nyoj-915-+-字符串
- NYOJ 915 +-字符串
- nyoj 915 + - 字符串 (递归)
- +-字符串 nyoj 915
- nyoj 915 +-字符串
- nyoj 915 +-字符串
- Hadoop HDFS文件系统通过java FileSystem 实现上传下载等
- MonkeyRunner浅谈和入门
- mac理解
- android中actionbar样式修改
- 专利搜索方法
- NYOJ 915 +-字符串
- Web前端开发人员实用Chrome插件收集
- javaweb-day05-1(Servlet - GenericServlet、Servlet调用过程图)
- spark 查找 中位数
- 按照指定显示长度分割字符串
- 获取目录下内容大小
- java post 请求参数传递,响应解析
- Best Time to Buy and Sell Stock
- shell if判断语句 报错:syntax error near unexpected token `elif'