混编字符问题
2015-08-20 17:39
309 查看
package com.pingan.mhc.bishi; import org.junit.Test; /** * @author mhc * A、B和C。如果C包含且仅包含来自A和B的所有字符,而且在C中属于A的字符之间保持原来在A中的顺序,属于B的字符之间保持原来在B中的顺序,那么称C是A和B的混编。实现一个函数,判断C是否是A和B的混编。 给定三个字符串A,B和C,及他们的长度。请返回一个bool值,代表C是否是A和B的混编。保证三个串的长度均小于等于100。 测试样例: "ABC",3,"12C",3,"A12BCC",6 返回:true */ public class Mixture { public boolean chkMixture(String A,int n,String B,int m,String C,int v){ //判断长度是否正确 if(n+m != v){ return false; } int x=0,y=0; int aMatch=0,bMatch=0; for (int i = 0; i < v; i++) { if(x<n && A.charAt(x)==C.charAt(i)){ ++x; ++aMatch; } //不用else if 如果出现相同的直接往下比较即可 if(y<m && B.charAt(y)==C.charAt(i)){ ++y; ++bMatch; } } /*当出现C[i] == A[j] && C[i] == B[k]时,aMatch,bMatch都会 自加1,相当于提前将C[x]这个匹配值用了,等比较到C[x]!= A[j] && C[x] != B[k]时,都不自加也没关系,结果是aMatch == n && bMatch == m;可是 如果:C不是A和B的混排这种情况,C[y] != A[j] && C[y] != B[k], aMatch和bMatch都不会自加1,反应到结果上aMatch < n | bMatch < m。 */ if(n == aMatch && m==bMatch){ System.out.println("是混编字符"); return true; }else System.out.println("不是混编字符"); return false; } @Test public void Test(){ // chkMixture("bcbccabccacccbcac",17,"abbbacaabccbccaaaabbcbcbaaacccbaaba",35,"babbbacaabccbccaaaabbcbcbaaacccbaabacbccabccacccbcac",52); chkMixture("b",1,"abbc",4,"abbbcc",6); } }
这个问题还可以用其他的方法解决,递归和动态规划,原题来自牛客网,参考评论解析,关键字“混编字符”
相关文章推荐
- MR案例:倒排索引
- Docker笔记(2)--自定义Tomcat Docker
- Android RecyclerView 使用完全解析
- [264] Ugly number2
- Swing带TrayIcon(托盘小图标)的Hello world示例
- JAVA抽象类和接口
- Oracle左连接、右连接、全外连接以及(+)号用法
- Linux下安装mongodb详细过程
- 整理MySql常用查询语句(23种)
- getline用法
- hdoj2066一个人的旅行
- Gcc与Make编译C/C++学习
- 字节(byte)与比特(bit)
- UVA 4854 A Digital Satire of Digital Age(模拟)
- 类/类别中的property属性
- IT痴汉的工作现状42-Android越用越慢?立场不同,谈何信任!
- CURL的学习和应用
- css 中visibility:hidden和display:none有什么区别呢
- Spring(一)——总体介绍
- 关于面试中的fork()问题