Php 查找具有CATCH的一组字符中特定字符串的出现次数

Php 查找具有CATCH的一组字符中特定字符串的出现次数,php,algorithm,Php,Algorithm,我试图找出如何计算一组字符中某个字符串的出现次数。关键在于字符串中的字母不必相邻,但必须按顺序出现 例如,序列“aabcc”包含四个字符串“abc” aabcc aabcc aabcc aabcc 我考虑过使用正则表达式,但它只匹配第一次出现的匹配。注意:这是JavaScript(对不起!)。它也可能比需要的复杂得多,但我的强迫症不会放过它 function search(needle, haystack) { var needles = needle.split(''); va

我试图找出如何计算一组字符中某个字符串的出现次数。关键在于字符串中的字母不必相邻,但必须按顺序出现

例如,序列“aabcc”包含四个字符串“abc”

aabcc

aabcc

aabcc

aabcc


我考虑过使用正则表达式,但它只匹配第一次出现的匹配。

注意:这是JavaScript(对不起!)。它也可能比需要的复杂得多,但我的强迫症不会放过它

function search(needle, haystack) {
    var needles = needle.split('');
    var haystacks = haystack.split('');
    var matches = [];
    var nI = 0;
    var hI = 0;
    for (hI = 0; hI < haystacks.length; hI++) {
        for (nI = 0; nI < needles.length; nI++) {
            if (haystacks[hI] === needles[nI]) {
                matches.push(nI);
            } else {
                continue;
            }
        }
    }
    matches = matches.reduce(function (acc, el, index) {
        var cur = acc.map[el];
        if (!cur) {
            acc.map[el] = cur = [];
            acc.res.push(cur);
        }
        cur.push(index);
        return acc;
    }, {
        res: [],
        map: {}
    }).res;
    return matches;
}

function allPossibleCases(arr) {
    return combinations(arr).map(function (combination) {
        return combination.join(" ");
    });
}

function combinations(array) {
    if (!array.length) {
        return [];
    }

    array = array.map(function (item) {
        return item instanceof Array ? item : [item];
    });

    function combine(list) {
        var prefixes, combinations;

        if (list.length === 1) {
            return list[0];
        }
        prefixes = list[0];
        combinations = combine(list.slice(1));
        return prefixes.reduce(function (memo, prefix) {
            return memo.concat(combinations.map(function (combination) {
                return [prefix].concat(combination);
            }))
        }, []);
    }

    return combine(array);
}

var r = allPossibleCases(search("abc", "aabcc"));

// r.length = 4, r = array of matches
功能搜索(针、草垛){
var针=针分裂(“”);
var haystacks=haystack.split(“”);
var匹配=[];
var nI=0;
var-hI=0;
对于(hI=0;hI
这里有一个游戏


注意:利用了一些代码来计算剩余的对象。

这似乎是一个算法问题,而不是正则表达式问题。您可以修改正则表达式引擎来计算,但使用普通正则表达式并不能解决您的问题。@Jonny5:是否需要发布PHP实现?不管怎么说,这里都是关于算法的。谢谢@remus。我很难理解如何使用矩阵来确定每场比赛?老实说,昨晚我也是。“今天早上我要仔细考虑一下——我的直觉告诉我这会奏效的。”史蒂文穆斯梅奇见编辑。那应该对你有用。