您的位置:首页 > 其它

混编字符问题

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);
}
}


这个问题还可以用其他的方法解决,递归和动态规划,原题来自牛客网,参考评论解析,关键字“混编字符”
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: