给定一个字符串,我想创建子字符串集的最小数量,其中:
- 子字符串的最大长度为x
- 如果两个集合不同,并且一个集合中的子字符串可以由另一个集合中较小的子字符串组成,则可以排除第二个集合
例如,子字符串最大长度为3的子字符串"ABCDEF"将产生以下结果:
[
['abc','def'],
['ab','cde','f'],
['ab','cd','ef'],
['a','bcd','ef'],
]
由于条件(2),不包括['abc','de','f']
.例如,‘def’由‘de’,‘f’组成.
下面的递归allSubstring()方法不太正确,而且感觉不像是正确的方法.还有一个问题是,弦越长,速度越慢.
const allSubstrings = (input,max_len = 3) => {
if( input.length === 1) return [[input]];
let result = [];
const start = input.substring(1);
allSubstrings(start).forEach(function(subresult) {
let tmp = subresult.slice(0);
if( tmp[0].length < max_len ){
tmp[0] = input.charAt(0) + tmp[0];
result.push(tmp);
}
if( subresult.length > 1 ){
if( subresult.slice(0,2).join('').length <= max_len ){
return;
}
if( subresult.slice(subresult.length-2).join('').length <= max_len ){
return;
}
}
tmp = subresult.slice(0);
tmp.unshift(input.charAt(0));
result.push(tmp);
});
return result;
}