Skip to content

Instantly share code, notes, and snippets.

@stalcottsmith
Created March 11, 2014 09:01
Show Gist options
  • Save stalcottsmith/9481995 to your computer and use it in GitHub Desktop.
Save stalcottsmith/9481995 to your computer and use it in GitHub Desktop.
quick naive is_substring implementation
def is_substring?(s1, s2)
match = false
if s2.length > s1.length
s1_chars, s2_chars = s1.split(''), s2.split('')
possible_matches = []
s2_chars.each_with_index do |c, i|
possible_matches << [c, i] if c == s1_chars.first
end
possible_matches = possible_matches.map {|c,i| s2_chars.slice(i,s1.length).join}
match = possible_matches.any? {|candidate| candidate == s1 }
elsif s2 == s1
match = true
end
return match
end
is_substring?("teapot", "I'm a little teapot short and stout.") or raise "FAILED"
is_substring?("foo", "foobar") or raise "FAILED"
is_substring?("bar", "foobar") or raise "FAILED"
is_substring?("FizzBuzz", "FizzBuzz") or raise "FAILED"
!is_substring?("BuzzFizz", "FizzBuzz") or raise "FAILED"
!is_substring?("baz", "foobar") or raise "FAILED"
!is_substring?("baz", "zfoobarba") or raise "FAILED"
puts "PASSED"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment