From 997ccae44c89027610a729e776c821fcc22fb205 Mon Sep 17 00:00:00 2001 From: fartem Date: Tue, 11 Feb 2025 06:53:35 +0300 Subject: [PATCH] 2025-02-11 v. 8.5.0: added "1347. Minimum Number of Steps to Make Two Strings Anagram" --- README.md | 1 + leetcode-ruby.gemspec | 2 +- ...er_of_steps_to_make_two_strings_anagram.rb | 24 ++++++++++++ ...er_of_steps_to_make_two_strings_anagram.rb | 37 +++++++++++++++++++ 4 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 lib/medium/1347_minimum_number_of_steps_to_make_two_strings_anagram.rb create mode 100644 test/medium/test_1347_minimum_number_of_steps_to_make_two_strings_anagram.rb diff --git a/README.md b/README.md index 30e6a7db..1cfb8de3 100644 --- a/README.md +++ b/README.md @@ -682,6 +682,7 @@ Profile on LeetCode: [fartem](https://leetcode.com/fartem/). | 1338. Reduce Array Size to The Half | [Link](https://leetcode.com/problems/reduce-array-size-to-the-half/) | [Link](./lib/medium/1338_reduce_array_size_to_the_half.rb) | [Link](./test/medium/test_1338_reduce_array_size_to_the_half.rb) | | 1339. Maximum Product of Splitted Binary Tree | [Link](https://leetcode.com/problems/maximum-product-of-splitted-binary-tree/) | [Link](./lib/medium/1339_maximum_product_of_splitted_binary_tree.rb) | [Link](./test/medium/test_1339_maximum_product_of_splitted_binary_tree.rb) | | 1343. Number of Sub-arrays of Size K and Average Greater than or Equal to Threshold | [Link](https://leetcode.com/problems/number-of-sub-arrays-of-size-k-and-average-greater-than-or-equal-to-threshold/) | [Link](./lib/medium/1343_number_of_sub_arrays_of_size_k_and_average_greater_than_or_equal_to_threshold.rb) | [Link](./test/medium/test_1343_number_of_sub_arrays_of_size_k_and_average_greater_than_or_equal_to_threshold.rb) | +| 1347. Minimum Number of Steps to Make Two Strings Anagram | [Link](https://leetcode.com/problems/minimum-number-of-steps-to-make-two-strings-anagram/) | [Link](./lib/medium/1347_minimum_number_of_steps_to_make_two_strings_anagram.rb) | [Link](./test/medium/test_1347_minimum_number_of_steps_to_make_two_strings_anagram.rb) | | 1400. Construct K Palindrome Strings | [Link](https://leetcode.com/problems/construct-k-palindrome-strings/) | [Link](./lib/medium/1400_construct_k_palindrome_strings.rb) | [Link](./test/medium/test_1400_construct_k_palindrome_strings.rb) | | 2116. Check if a Parentheses String Can Be Valid | [Link](https://leetcode.com/problems/check-if-a-parentheses-string-can-be-valid/) | [Link](./lib/medium/2116_check_if_a_parentheses_string_can_be_valid.rb) | [Link](./test/medium/test_2116_check_if_a_parentheses_string_can_be_valid.rb) | | 2425. Bitwise XOR of All Pairings | [Link](https://leetcode.com/problems/bitwise-xor-of-all-pairings/) | [Link](./lib/medium/2425_bitwise_xor_of_all_pairings.rb) | [Link](./test/medium/test_2425_bitwise_xor_of_all_pairings.rb) | diff --git a/leetcode-ruby.gemspec b/leetcode-ruby.gemspec index 58055398..869726a9 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 = '8.4.9' + s.version = '8.5.0' s.license = 'MIT' s.files = ::Dir['lib/**/*.rb'] + %w[README.md] s.executable = 'leetcode-ruby' diff --git a/lib/medium/1347_minimum_number_of_steps_to_make_two_strings_anagram.rb b/lib/medium/1347_minimum_number_of_steps_to_make_two_strings_anagram.rb new file mode 100644 index 00000000..1d32aeb9 --- /dev/null +++ b/lib/medium/1347_minimum_number_of_steps_to_make_two_strings_anagram.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +# https://leetcode.com/problems/minimum-number-of-steps-to-make-two-strings-anagram/ +# @param {String} s +# @param {String} t +# @return {Integer} +def min_steps(s, t) + s_letters = ::Array.new(128, 0) + s.each_char { |c| s_letters[c.ord] += 1 } + + t_letters = ::Array.new(128, 0) + t.each_char { |c| t_letters[c.ord] += 1 } + + result = 0 + + (0...s_letters.size).each do |i| + s_count = s_letters[i] + t_count = t_letters[i] + + result += s_count - t_count if s_count > t_count + end + + result +end diff --git a/test/medium/test_1347_minimum_number_of_steps_to_make_two_strings_anagram.rb b/test/medium/test_1347_minimum_number_of_steps_to_make_two_strings_anagram.rb new file mode 100644 index 00000000..ad188a5e --- /dev/null +++ b/test/medium/test_1347_minimum_number_of_steps_to_make_two_strings_anagram.rb @@ -0,0 +1,37 @@ +# frozen_string_literal: true + +require_relative '../test_helper' +require_relative '../../lib/medium/1347_minimum_number_of_steps_to_make_two_strings_anagram' +require 'minitest/autorun' + +class MinimumNumberOfStepsToMakeTwoStringsAnagramTest < ::Minitest::Test + def test_default_one + assert_equal( + 1, + min_steps( + 'bab', + 'aba' + ) + ) + end + + def test_default_two + assert_equal( + 5, + min_steps( + 'leetcode', + 'practice' + ) + ) + end + + def test_default_three + assert_equal( + 0, + min_steps( + 'anagram', + 'mangaar' + ) + ) + end +end