Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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
在字符串b中查找较小字符串s的所有排列(JavaScript)_Javascript_String_Algorithm - Fatal编程技术网

在字符串b中查找较小字符串s的所有排列(JavaScript)

在字符串b中查找较小字符串s的所有排列(JavaScript),javascript,string,algorithm,Javascript,String,Algorithm,我一直在试图找到以下问题的O(n)解决方案:在字符串b中找到字符串s的字谜(排列)数量,其中s.length总是小于b.length 我了解到最佳解决方案包括跟踪较小字符串中字符的频率,并在滑动窗口在较大字符串中移动时对其执行相同的操作,但我不确定该实现实际上是如何工作的。现在我的解决方案不起作用(见注释),但即使它起作用,也需要O(s+sn)时间 编辑:示例输入:('aba','abaab')。输出:3,因为'aba'存在于从索引0开始的b中,而'baa'存在于1处,而'aab'存在于2处 f

我一直在试图找到以下问题的O(n)解决方案:在字符串b中找到字符串s的字谜(排列)数量,其中s.length总是小于b.length

我了解到最佳解决方案包括跟踪较小字符串中字符的频率,并在滑动窗口在较大字符串中移动时对其执行相同的操作,但我不确定该实现实际上是如何工作的。现在我的解决方案不起作用(见注释),但即使它起作用,也需要O(s+sn)时间

编辑:示例输入:
('aba','abaab')
。输出:3,因为
'aba'
存在于从索引0开始的b中,而
'baa'
存在于1处,而
'aab'
存在于2处

function anagramsInStr(s,b) {

    //O(s)
    let freq = s.split("").reduce((map, el) => {
        map[el] = (map[el] + 1) || 1;
        return map;
    }, {});

    let i = 0, j = s.length;
    // O(n)
    for (let char in b.split("")) {
        // O(s)
        if (b.length - char + 1 > s.length) {

            let window = b.slice(i,j);

            let windowFreq = window.split("").reduce((map, el) => {
                map[el] = (map[el] + 1) || 1;
                return map;
            }, {});
            // Somewhere about here compare the frequencies of chars found in the window to the frequencies hash defined in the outer scope. 
            i++;
            j++;

        }
    }
}

请通读评论,如果您有任何问题,请告诉我:

函数计数一个全局事件(s,b){
var-matchCount=0;
var sconts={};//统计s中的字母
var bCounts={};//b中字母的计数
//建造童子军
对于(变量i=0;i=s.length){
b计数[b[i-s.长度]]-=1;
}
//增加我们当前正在查看的信件的计数
b计数[b[i]=(b计数[b[i]| | 0)+1;
//测试是否匹配(b计数==s计数)
var匹配=真;
对于(var j=0;jconsole.log(countAnagramOccurrences('aba','abaab'));//3
您能举一个输入和预期输出的例子吗?我很难理解目标。(这仅仅是为了检查
s
是否可以从
b
生成?还是为了计算方法的数量?还是其他?@smarx是的!在问题中添加了示例输入和输出。