From 82ae564812e3f2edbc2eb2730993d76bcc731075 Mon Sep 17 00:00:00 2001 From: fartem Date: Mon, 13 Jan 2025 09:22:06 +0300 Subject: [PATCH] 2025-01-13 v. 7.9.4: added "3223. Minimum Length of String After Operations" --- README.md | 1 + leetcode-ruby.gemspec | 2 +- ...nimum_length_of_string_after_operations.rb | 20 +++++++++++++++++++ ...nimum_length_of_string_after_operations.rb | 11 ++++++++++ 4 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 lib/medium/3223_minimum_length_of_string_after_operations.rb create mode 100644 test/medium/test_3223_minimum_length_of_string_after_operations.rb diff --git a/README.md b/README.md index 020d2023..791c03f3 100644 --- a/README.md +++ b/README.md @@ -642,6 +642,7 @@ Profile on LeetCode: [fartem](https://leetcode.com/fartem/). | 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) | | 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) | +| 3223. Minimum Length of String After Operations | [Link](https://leetcode.com/problems/minimum-length-of-string-after-operations/) | [Link](./lib/medium/3223_minimum_length_of_string_after_operations.rb) | [Link](./test/medium/test_3223_minimum_length_of_string_after_operations.rb) | ### Hard diff --git a/leetcode-ruby.gemspec b/leetcode-ruby.gemspec index bfcb75c1..14b25040 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.9.3' + s.version = '7.9.4' s.license = 'MIT' s.files = ::Dir['lib/**/*.rb'] + %w[README.md] s.executable = 'leetcode-ruby' diff --git a/lib/medium/3223_minimum_length_of_string_after_operations.rb b/lib/medium/3223_minimum_length_of_string_after_operations.rb new file mode 100644 index 00000000..5c52f305 --- /dev/null +++ b/lib/medium/3223_minimum_length_of_string_after_operations.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +# https://leetcode.com/problems/minimum-length-of-string-after-operations/ +# @param {String} s +# @return {Integer} +def minimum_length(s) + count = ::Hash.new(0) + minus = 0 + + s.each_char { |c| count[c] += 1 } + + count.each_value do |freq| + while freq >= 3 + minus += 2 + freq -= 2 + end + end + + s.size - minus +end diff --git a/test/medium/test_3223_minimum_length_of_string_after_operations.rb b/test/medium/test_3223_minimum_length_of_string_after_operations.rb new file mode 100644 index 00000000..df1412cd --- /dev/null +++ b/test/medium/test_3223_minimum_length_of_string_after_operations.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +require_relative '../test_helper' +require_relative '../../lib/medium/3223_minimum_length_of_string_after_operations' +require 'minitest/autorun' + +class MinimumLengthOfStringAfterOperationsTest < ::Minitest::Test + def test_default_one = assert_equal(5, minimum_length('abaacbcbb')) + + def test_default_two = assert_equal(2, minimum_length('aa')) +end