From 6862be74d712fda7b9dbcd690be8aece33a1fd7e Mon Sep 17 00:00:00 2001 From: fartem Date: Fri, 10 Jan 2025 10:57:06 +0300 Subject: [PATCH] 2025-01-10 v. 7.8.7: added "916. Word Subsets" --- README.md | 1 + leetcode-ruby.gemspec | 2 +- lib/medium/916_word_subsets.rb | 46 ++++++++++++++++++++++++++++ test/medium/test_916_word_subsets.rb | 27 ++++++++++++++++ 4 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 lib/medium/916_word_subsets.rb create mode 100644 test/medium/test_916_word_subsets.rb diff --git a/README.md b/README.md index 862c38cb..bce0c22f 100644 --- a/README.md +++ b/README.md @@ -637,6 +637,7 @@ Profile on LeetCode: [fartem](https://leetcode.com/fartem/). | 890. Find and Replace Pattern | [Link](https://leetcode.com/problems/find-and-replace-pattern/) | [Link](./lib/medium/890_find_and_replace_pattern.rb) | [Link](./test/medium/test_890_find_and_replace_pattern.rb) | | 894. All Possible Full Binary Trees | [Link](https://leetcode.com/problems/all-possible-full-binary-trees/) | [Link](./lib/medium/894_all_possible_full_binary_trees.rb) | [Link](./test/medium/test_894_all_possible_full_binary_trees.rb) | | 901. Online Stock Span | [Link](https://leetcode.com/problems/online-stock-span/) | [Link](./lib/medium/901_online_stock_span.rb) | [Link](./test/medium/test_901_online_stock_span.rb) | +| 916. Word Subsets | [Link](https://leetcode.com/problems/word-subsets/) | [Link](./lib/medium/916_word_subsets.rb) | [Link](./test/medium/test_916_word_subsets.rb) | ### Hard diff --git a/leetcode-ruby.gemspec b/leetcode-ruby.gemspec index 199aeb38..5d424fe3 100644 --- a/leetcode-ruby.gemspec +++ b/leetcode-ruby.gemspec @@ -5,7 +5,7 @@ require 'English' ::Gem::Specification.new do |s| s.required_ruby_version = '>= 3.0' s.name = 'leetcode-ruby' - s.version = '7.8.6' + s.version = '7.8.7' s.license = 'MIT' s.files = ::Dir['lib/**/*.rb'] + %w[README.md] s.executable = 'leetcode-ruby' diff --git a/lib/medium/916_word_subsets.rb b/lib/medium/916_word_subsets.rb new file mode 100644 index 00000000..ea6bcfad --- /dev/null +++ b/lib/medium/916_word_subsets.rb @@ -0,0 +1,46 @@ +# frozen_string_literal: true + +# https://leetcode.com/problems/word-subsets/ +# @param {String[]} words1 +# @param {String[]} words2 +# @return {String[]} +def word_subsets(words1, words2) + b_max = count_for_word_subsets('') + + words2.each do |b| + b_count = count_for_word_subsets(b) + + (0...128).each { |i| b_max[i] = [b_max[i], b_count[i]].max } + end + + result = [] + + words1.each do |a| + a_count = count_for_word_subsets(a) + + has_break = false + + (0...128).each do |i| + next unless a_count[i] < b_max[i] + + has_break = true + + break + end + + result << a unless has_break + end + + result +end + +private + +# @param {String} s +# @return {Integer[]} +def count_for_word_subsets(s) + result = ::Array.new(128, 0) + s.each_byte { |b| result[b] += 1 } + + result +end diff --git a/test/medium/test_916_word_subsets.rb b/test/medium/test_916_word_subsets.rb new file mode 100644 index 00000000..d4dc5a52 --- /dev/null +++ b/test/medium/test_916_word_subsets.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +require_relative '../test_helper' +require_relative '../../lib/medium/916_word_subsets' +require 'minitest/autorun' + +class WordSubsetsTest < ::Minitest::Test + def test_default_one + assert_equal( + %w[facebook google leetcode], + word_subsets( + %w[amazon apple facebook google leetcode], + %w[e o] + ) + ) + end + + def test_default_two + assert_equal( + %w[apple google leetcode], + word_subsets( + %w[amazon apple facebook google leetcode], + %w[l e] + ) + ) + end +end