Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 给定任意数量的不同字母,如何找到包含所有可能的两个字母序列的最短字符串?_String_Algorithm - Fatal编程技术网

String 给定任意数量的不同字母,如何找到包含所有可能的两个字母序列的最短字符串?

String 给定任意数量的不同字母,如何找到包含所有可能的两个字母序列的最短字符串?,string,algorithm,String,Algorithm,我很难解释,因为英语是我的第二语言,我不擅长逻辑。我会举一些例子来帮助你 如果字母是ABC,我要寻找的有效组合是AB、AC、BA、BC、CA、CB。 简单地组合成一个字符串:abacbaccab 但该字符串中仍然存在重复项。如果我“压缩”它,我得到:ABACBCA 我不知道如何更好地解释,但我正在寻找一种能够产生“压缩”版本的算法。为了学习jenesaisquoi的,如果我们删除连续的重复项,可以使用de Brujin序列 JavaScript中的示例(改编自上的Python代码)。请记住,de

我很难解释,因为英语是我的第二语言,我不擅长逻辑。我会举一些例子来帮助你

如果字母是ABC,我要寻找的有效组合是AB、AC、BA、BC、CA、CB。 简单地组合成一个字符串:abacbaccab 但该字符串中仍然存在重复项。如果我“压缩”它,我得到:ABACBCA


我不知道如何更好地解释,但我正在寻找一种能够产生“压缩”版本的算法。

为了学习jenesaisquoi的,如果我们删除连续的重复项,可以使用de Brujin序列

JavaScript中的示例(改编自上的Python代码)。请记住,de Brujin序列是环绕的,因此我们需要包含适当的重叠以获得所有组合

函数de_bruijn(k,n){ /*** 字母k的de Bruijn序列 和长度为n的子序列。 ***/ 变量字母表 如果(k的类型=='number'){ 字母表=新数组(k).填充(空) .map((_,i)=>字符串(i)) }else if(typeof k=='string'){ 字母表=k k=k.长度 } var a=新数组(k*n)。填充(0) 变量序列=[] 函数db(t,p){ 如果(t>n){ 如果(n%p==0) sequence=sequence.concat( a、 切片(1,p+1)) }否则{ a[t]=a[t-p] 分贝(t+1,p) for(设j=a[t-p]+1;j字母[i]) .join(“”) } // https://stackoverflow.com/questions/30716829/how-to-remove-repeated-entries-from-an-array-while-preserving-non-consecutive-du 功能移除副本(str){ 返回str.split(“”)过滤器(函数(项、位置、arr){ 返回位置===0 | |项!==arr[pos-1];} ).join(“”) } var结果=de_bruijn(3,2) console.log(结果) console.log(移除的副本(结果)) 结果=de_bruijn(“abc”,2) console.log(结果)
log(removeDuplicates(result))我相信您正在寻找的是一个de Bruijnsequence@jenesaisquoiNVM,当我们考虑它环绕的时候,正确的,在这里得到精确的结果,使用Wiki页面W/O修改的算法,你会把第一个字符追加到结尾并删除后续的副本。(或者在一般情况下是
n-1
)这太棒了!非常感谢:)仅供参考:这将用于优化我的吉他练习,特别是和弦变化。非常感谢!@Kerans-huh!很棒的应用程序。