首页 > 试题广场 >

编写一个函数isMerge,判断一个字符串str是否可以由其

[问答题]
编写一个函数isMerge,判断一个字符串str是否可以由其他两个字符串part1和part2“组合”而成。“组合 ”的规则如下:
1). str中的每个字母要么来自于part1,要么来自于part2;
2). part1和part2中字母的顺序与str中字母的顺序相同。
例如:
"codewars"由"cdw"和"oears"组合而成:
s: c o d e w a r s = codewars
part1: c d w = cdw
part2: o e a r s = oears
完成函数:
function isMerge(s, part1, part2) {
//code here
}

functionisMerge(s,part1,part2){
if(!(s.length == part1.length + part2.length)) {
        return false;
  }else{
        varindex1=0;
         varindex2=0;
        for(vari=0;i<s.length;i++){
            if(s[i]==part1[index1]){
                index1++;
            }elseif(s[i]==part2[index2]){
                index2++;
            }else{
                break;
            }
        }
        return(index1==part1.length) && (index2==part2.length);
    }
}


发表于 2017-08-03 22:19:52 回复(2)
function isMerge(s, part1, part2) {
    var p1 = part1.split(''),
	p2 = part2.split('');

    for(var i = 0, length1 = s.length; i < length1; i++){
	    if (p1.indexOf(s[i]) > -1) {
	        p1.shift();
	    } else if (p2.indexOf(s[i]) > -1) {
	        p2.shift();
	    } else {
	        return false;
	    }
    }
    return true;
} 

编辑于 2017-08-14 21:48:57 回复(4)
function isMerge(s, part1, part2) {
	var sArray = new Array();
	if(s.length == part1.length + part2.length)
	{
		//var parrays = s.split("");
		var parray1 = part1.split("");
		var parray2 = part2.split("");
		console.log(parray1);
		console.log(parray2);
		for(var ai = 0;ai<part1.length;ai++)
		{
			if(s.indexOf(parray1[ai])!= -1)
			{
				sArray.push(s.indexOf(parray1[ai]));
			}
		}
		for(var bi = 0;bi<part2.length;bi++)
		{
			if(s.indexOf(parray2[bi])!= -1)
			{
				sArray.push(s.indexOf(parray2[bi]));
			}
		}
	}
	
	sArray = sArray.unque();
	console.log(sArray);
	if(sArray.length == s.length )
	{
		console.log("成功了");
	}
	else
	{
		console.log("失败");
	}
	
}

Array.prototype.unque = function(){
	var json = [];
	var newArray = new Array();
	for(var i = 0; i < this.length; i++){
		if(json[this[i]]!=1)
		{
			json[this[i]] = 1;
			newArray.push(this[i]);
		}
	}
	return newArray;
}

var a1 = "codewars";
var a2 = "cdw";
var a3 = "oears";

isMerge(a1,a2,a3);


编辑于 2017-08-30 23:50:48 回复(0)
function isMerge(s, part1, part2){
    var s1 = [];
    var s2 = [];
    for(var i=0, len=s.length; i<len; i++){
        if(part1.indexOf(s[i])>-1) s1.push(s[i]);
        else if(part2.indexOf(s[i])>-1) s2.push(s[i]);
        else return false;
    }
    s1.forEach(function(item){
        if(part1.indexOf(item) != s1.indexOf(item)) return false;
    })
    s2.forEach(function(item){
        if(part2.indexOf(item) != s2.indexOf(item)) return false;
    })    

    return true;
}

发表于 2017-07-29 15:43:09 回复(8)
function isMerge(str, part1, part2) {
while (str.length != 0) {
if (part1.indexOf(str[0]) == 0) {
part1 = part1.split(str[0])[1];
} else if (part2.indexOf(str[0]) == 0) {
part2 = part2.split(str[0])[1];
} else {
return false;
}
str = str.split(str[0])[1];
}
return true;
}
发表于 2019-08-21 20:19:41 回复(0)
发表于 2018-03-26 10:34:01 回复(0)
1.考虑两个部分组合起来的长度是不是与测试的字符串长度相同。 2.可以将两部分结合起来,再通过对组合出来的部分与字符串遍历对比,把相同都去除。 只要出现一个遍历结果不同,就结束循环 #include<iostream> using namespace std; #include<cstring> bool isMergry(string s, string part1,string part2) { string *test = new string(part1); strcat(test,part2); if(strlen(s) = strlen(test)) { int i = 0 , j,k; int len = strlen(s); while(i < strlen(s)) { for(j=0;j<strlen(s);j++) { if(*(s+i)==*(test+j)) { k=j;*(test+k) = } } } } }
发表于 2017-10-01 23:33:54 回复(0)
function isMerge(s, part1, part2) {
    var arr = s.split('');
    // 存放上一个匹配到的下标
    var p1index= -1;
    var p2index= -1;
    var arrp1 = part1.split('');
    var arrp2 = part2.split('');
    for(var i = 0; i < arr.length; i++) {
        if (arrp1.indexOf(arr[i]) !== -1) {
            if (p1index + 1 === arrp1.indexOf(arr[i])) {
                p1index++;
            } else {
                return false;
            }
            console.log(p1index + ' , ' + p2index);
            continue;
        } else if (arrp2.indexOf(arr[i]) !== -1) {
            if (p2index + 1 === arrp2.indexOf(arr[i])) {
                p2index++;
            } else {
                return false;
            }
            console.log(p1index + ' , ' + p2index);
            continue;
        }
        return false;
    }
    return true;
}
发表于 2017-09-22 19:12:23 回复(0)
function isMerge(s, p1, p2){
	var i = 0, j = i;
	while (i < p1.length && i < p2.length){
		if (s[j] == p1[i] && s[++j] == p2[i]){
			i++;
			j++;
		}else{
			return false;
		}
	}

	while (i < p1.length){
		if (p1[i] != s[j]){
			return false;
		}
		i++;
		j++;
	}

	while (i < p2.length){
		if (p2[i] != s[j]){
			return false;
		}
		i++;
		j++;
	}

	return true;
}


发表于 2017-08-10 16:52:41 回复(0)
function isMerge(s, part1, part2) { if(s.length==part1.length+part2.length){ var j=0,k=0; for(var i=0;i<s.length;i++){ if(s[i]==part1[j] && j<part1.length){ j++;
            }else if (s[i]==part2[k] && k<part2.length){ k++;
            }else { return false;
            }
        } return true;
    }else { return false;
    }
}

编辑于 2017-08-10 16:00:47 回复(0)
function inMerge(s,part1,part2){
    var len = s.length;
    var part1len = part1.length;
    var part2len = part2.length;
    var point1 = 0;
    var point2 = 0;
    while(len >= 0 && (point1<=part1len || point2<=part2len)){
        if(part1[point1] == s[0]){
            s=s.slice(1);
            len--;
            point1++;
        }else if(part2[point2] == s[0]){
            s=s.slice(1);
            len--;
            point2++;
	}else{
            point1++;
            point2++;
	}
    }
    if(len >0)
        return false;
    else
        return true;
}

编辑于 2017-08-06 08:59:54 回复(0)
function isMerge(s, part1, part2){
    var part1Arr = part1.split('');
    var part2Arr = part2.split('');
    var part1Count = [];
    var part2Count = [];
    function countArr(tmp) {
       var result = [];
       for(var i = 0; i < tmp.length; i++) {
            var idx = s.indexOf(tmp[i]);
            if(idx != -1) {
                result.push(idx);
            }
        }
        return result;
    }
    function minOrder(temp) {
        for(var i = 0; i < temp.length; i++) {
            if(temp[i] > temp[i+1]){
                return false;
            }
        }
        return true;
    }
    part1Count = countArr(part1Arr);
    part2Count = countArr(part2Arr); 
    if((part1Count.length + part2Count.length) != s.length){
         console.log("s 不由 part1和part2 组成");
    }else{
        if(minOrder(part1Count) && minOrder(part2Count)){
         console.log("s由part1和part2组成")
        }
    }
}

发表于 2017-08-05 17:42:28 回复(0)
functionisMerge(str,part1,part2){
    vararr1=[];
    vararr2=[];
    varflag=false;
    varstrArr=str.split("");
    for(varkey instrArr){
        if(part1.indexOf(strArr[key])==-1&&part2.indexOf(strArr[key])!=-1){
            arr2.push(strArr[key]);
        }elseif(part1.indexOf(strArr[key])!=-1&&part2.indexOf(strArr[key])==-1){
            arr1.push(strArr[key]);
        }else{
            returnfalse;
            break;
        }
    }  
    for(vari=1;i<arr1.length;i++){
        if(part1.indexOf(arr1[i])>part1.indexOf(arr1[i-1])){
            flag=true;
        }else{
            returnfalse;
            break;
        }
    }
    for(vari=1;i<arr2.length;i++){
        if(part2.indexOf(arr2[i])>part2.indexOf(arr2[i-1])){
            flag=true;
        }else{
            returnfalse;
            break;
        }
    }
   returnflag;
}

发表于 2017-08-04 21:05:52 回复(0)
var p1 = [];
var p2 = [];
for(var i=0;i<s.length;i++){
part1.indexOf(s[i])==-1?p2.push(s[i]):p1.push([s[i]]);
}
if(p1.join("")==part1&&p2.join("")==part2){
return true;
}else{
return false;
}

编辑于 2017-08-03 14:10:57 回复(0)
可以用dp做
dp[i][j]表示part1前i和part2前j 个能否组成str的前i+j这个串

发表于 2017-07-14 15:30:50 回复(1)
断续的怎么考虑
发表于 2017-07-14 01:32:00 回复(0)