From 41711f61ff8914c46b689d77181828f505cf605a Mon Sep 17 00:00:00 2001 From: fartem Date: Wed, 13 Nov 2024 09:12:16 +0300 Subject: [PATCH] 2024-11-13 v. 7.0.2: added "424. Longest Repeating Character Replacement" --- README.md | 1 + leetcode-ruby.gemspec | 2 +- ...longest_repeating_character_replacement.rb | 31 +++++++++++++++++++ ...longest_repeating_character_replacement.rb | 11 +++++++ 4 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 lib/medium/424_longest_repeating_character_replacement.rb create mode 100644 test/medium/test_424_longest_repeating_character_replacement.rb diff --git a/README.md b/README.md index c430b648..7abb2fca 100644 --- a/README.md +++ b/README.md @@ -567,3 +567,4 @@ Profile on LeetCode: [fartem](https://leetcode.com/fartem/). | 400. Nth Digit | [Link](https://leetcode.com/problems/nth-digit/) | [Link](./lib/medium/400_nth_digit.rb) | [Link](./test/medium/test_400_nth_digit.rb) | | 402. Remove K Digits | [Link](https://leetcode.com/problems/remove-k-digits/) | [Link](./lib/medium/402_remove_k_digits.rb) | [Link](./test/medium/test_402_remove_k_digits.rb) | | 417. Pacific Atlantic Water Flow | [Link](https://leetcode.com/problems/pacific-atlantic-water-flow/) | [Link](./lib/medium/417_pacific_atlantic_water_flow.rb) | [Link](./test/medium/test_417_pacific_atlantic_water_flow.rb) | +| 424. Longest Repeating Character Replacement | [Link](https://leetcode.com/problems/longest-repeating-character-replacement/) | [Link](./lib/medium/424_longest_repeating_character_replacement.rb) | [Link](./test/medium/test_424_longest_repeating_character_replacement.rb) | diff --git a/leetcode-ruby.gemspec b/leetcode-ruby.gemspec index b097304c..c59a64f7 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.0.1' + s.version = '7.0.2' s.license = 'MIT' s.files = ::Dir['lib/**/*.rb'] + %w[README.md] s.executable = 'leetcode-ruby' diff --git a/lib/medium/424_longest_repeating_character_replacement.rb b/lib/medium/424_longest_repeating_character_replacement.rb new file mode 100644 index 00000000..d39d10d6 --- /dev/null +++ b/lib/medium/424_longest_repeating_character_replacement.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +# https://leetcode.com/problems/longest-repeating-character-replacement/ +# @param {String} s +# @param {Integer} k +# @return {Integer} +def character_replacement(s, k) + freq = ::Array.new(128, 0) + f = 0 + e = 0 + max = 0 + result = 0 + + while e < s.size + i = s[e].ord + freq[i] += 1 + max = [max, freq[i]].max + + curr = e - f + 1 + if curr - max > k + freq[s[f].ord] -= 1 + f += 1 + end + + result = [result, e - f + 1].max + + e += 1 + end + + result +end diff --git a/test/medium/test_424_longest_repeating_character_replacement.rb b/test/medium/test_424_longest_repeating_character_replacement.rb new file mode 100644 index 00000000..38ac54e5 --- /dev/null +++ b/test/medium/test_424_longest_repeating_character_replacement.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +require_relative '../test_helper' +require_relative '../../lib/medium/424_longest_repeating_character_replacement' +require 'minitest/autorun' + +class LongestRepeatingCharacterReplacementTest < ::Minitest::Test + def test_default_one = assert_equal(4, character_replacement('ABAB', 2)) + + def test_default_two = assert_equal(4, character_replacement('AABABBA', 1)) +end