Find the number of occurrences of a subsequence in a string

前端 未结 9 1580
粉色の甜心
粉色の甜心 2020-12-04 05:13

For example, let the string be the first 10 digits of pi, 3141592653, and the subsequence be 123. Note that the sequence occurs twice:



        
9条回答
  •  遥遥无期
    2020-12-04 05:47

    A Javascript answer based on dynamic programming from geeksforgeeks.org and the answer from aioobe:

    class SubseqCounter {
        constructor(subseq, seq) {
            this.seq = seq;
            this.subseq = subseq;
            this.tbl = Array(subseq.length + 1).fill().map(a => Array(seq.length + 1));
            for (var i = 1; i <= subseq.length; i++)
              this.tbl[i][0] = 0;
            for (var j = 0; j <= seq.length; j++)
              this.tbl[0][j] = 1;
        }
        countMatches() {
            for (var row = 1; row < this.tbl.length; row++)
                for (var col = 1; col < this.tbl[row].length; col++)
                     this.tbl[row][col] = this.countMatchesFor(row, col);
    
            return this.tbl[this.subseq.length][this.seq.length];
        }
        countMatchesFor(subseqDigitsLeft, seqDigitsLeft) {
                if (this.subseq.charAt(subseqDigitsLeft - 1) !=     this.seq.charAt(seqDigitsLeft - 1)) 
                return this.tbl[subseqDigitsLeft][seqDigitsLeft - 1];  
                else
                return this.tbl[subseqDigitsLeft][seqDigitsLeft - 1] +     this.tbl[subseqDigitsLeft - 1][seqDigitsLeft - 1]; 
        }
    }
    

提交回复
热议问题