aboutsummaryrefslogtreecommitdiff
path: root/challenge-099/paulo-custodio/awk/ch-2.awk
blob: a0d4b6de12ddf48ae866e03ed876a21571e58660 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#!/usr/bin/gawk

# Challenge 099
#
# TASK #2 > Unique Subsequence
# Submitted by: Mohammad S Anwar
# You are given two strings $S and $T.
#
# Write a script to find out count of different unique subsequences matching
# $T without changing the position of characters.
#
# Example 1:
# Input: $S = "littleit', $T = 'lit'
# Output: 5
#
#     1: [lit] tleit
#     2: [li] t [t] leit
#     3: [li] ttlei [t]
#     4: litt [l] e [it]
#     5: [l] ittle [it]
# Example 2:
# Input: $S = "london', $T = 'lon'
# Output: 3
#
#     1: [lon] don
#     2: [lo] ndo [n]
#     3: [l] ond [on]

function count_subsequences(s, t) {
    while (1) {
        if (t=="") {            # t is empty, matched
            return 1;
        }
        else if (s=="") {       # s is empty, did not match
            return 0;
        }
        else if (substr(s,1,1) == substr(t,1,1)) {  # same char,
                                                    # check two paths matching
                                                    # and not matching
            return count_subsequences(substr(s,2), substr(t,2)) \
                 + count_subsequences(substr(s,2), t);
        }
        else {                  # different char, keep pattern
            s = substr(s,2);
        }
    }
}

BEGIN {
    print count_subsequences(ARGV[1], ARGV[2]);
    exit 0;
}