summaryrefslogtreecommitdiff
path: root/misc/subsequence
diff options
context:
space:
mode:
authormo khan <mo.khan@gmail.com>2020-08-12 20:00:09 -0600
committermo khan <mo.khan@gmail.com>2020-08-12 20:00:09 -0600
commit7f7f9ea35f3bfe9749bb48ee9ac3ec9ae737891c (patch)
tree07fcc66e9db1ee4e09911c3187a8a5cb40450382 /misc/subsequence
parent4f538051b5baed4407e909e3680cb7ab5eb977ae (diff)
Use a recursive solution
Diffstat (limited to 'misc/subsequence')
-rw-r--r--misc/subsequence/main.rb21
1 files changed, 21 insertions, 0 deletions
diff --git a/misc/subsequence/main.rb b/misc/subsequence/main.rb
index 7a9c980..e8e2341 100644
--- a/misc/subsequence/main.rb
+++ b/misc/subsequence/main.rb
@@ -253,6 +253,27 @@ class Solution
result
end
+
+ def self.run(sequence, pattern, index = 0)
+ puts [sequence, pattern, index].inspect if ENV['DEBUG']
+ return index if pattern.nil? || pattern.empty?
+ return index if sequence.nil? || sequence.empty?
+
+ case (atom = pattern[0])
+ when '*'
+ if sequence[1] == pattern[1]
+ run(sequence[1..-1], pattern[1..-1], index)
+ else
+ run(sequence[1..-1], pattern, index)
+ end
+ else
+ if sequence[0] == atom
+ run(sequence[1..-1], pattern[1..-1], index)
+ else
+ run(sequence[1..-1], pattern, index + 1)
+ end
+ end
+ end
end
assert_equal 0, Solution.run('abcdef', 'a*d*f')