Algorithm to find the minimum length of substring having all characters of other string

前端 未结 4 971
我寻月下人不归
我寻月下人不归 2021-02-04 18:15

I have a two strings:
string1 - hello how are you,
String2 - olo (including space character)

Output: lo ho ( hello

4条回答
  •  心在旅途
    2021-02-04 19:15

    This is a example of implementation with JavaScript. The logic is similar as @Aprillion wrote above.

    DEMO : http://jsfiddle.net/ZB6vm/4/

    var s1 = "hello how are you";
    var s2 = "olo";
    var left, right;
    var min_distance;
    var answer = "";
    
    // make permutation recursively
    function permutate(ar, arrs, k) {
        // check if the end of recursive call
        if (k == arrs.length) {
            var r = Math.max.apply(Math, ar);
            var l = Math.min.apply(Math, ar);
            var dist = r - l + 1;
            if (dist <= min_distance) {
                min_distance = dist;
                left = l;
                right = r;
            }
            return;
        }
        for (var i in arrs[k]) {
            var v = arrs[k][i];
            if ($.inArray(v, ar) < 0) {
                var ar2 = ar.slice();
                ar2.push(v);
                 // recursive call
                permutate(ar2, arrs, k + 1);
            }
        }
    }
    
    function solve() {
        var ar = [];   // 1-demension array to store character position
        var arrs = []; // 2-demension array to store character position
        for (var i = 0; i < s2.length; i++) {
            arrs[i] = [];
            var c = s2.charAt(i);
            for (var k = 0; k < s1.length; k++) { // loop by s1
                if (s1.charAt(k) == c) {
                    if ($.inArray(k, arrs[i]) < 0) {
                        arrs[i].push(k); // save position found
                    }
                }
            }
        }
        // call permutate
        permutate(ar, arrs, 0);
        answer = s1.substring(left, right + 1);
        alert(answer);
    }
    
    solve();
    

    Hope this helps.

提交回复
热议问题