Skip to content

Latest commit

 

History

History
76 lines (60 loc) · 1.91 KB

File metadata and controls

76 lines (60 loc) · 1.91 KB

1624. Largest Substring Between Two Equal Characters

Given a string s, return the length of the longest substring between two equal characters, excluding the two characters. If there is no such substring return -1.

A substring is a contiguous sequence of characters within a string.

Example 1:

Input: s = "aa"
Output: 0
Explanation: The optimal substring here is an empty substring between the two 'a's.

Example 2:

Input: s = "abca"
Output: 2
Explanation: The optimal substring here is "bc".

Example 3:

Input: s = "cbzxy"
Output: -1
Explanation: There are no characters that appear twice in s.

Example 4:

Input: s = "cabbac"
Output: 4
Explanation: The optimal substring here is "abba". Other non-optimal substrings include "bb" and "".

Constraints:

  • 1 <= s.length <= 300
  • s contains only lowercase English letters.

Solutions (Ruby)

1. Solution

# @param {String} s
# @return {Integer}
def max_length_between_equal_characters(s)
  pairs = Array.new(26) { |_| [s.length, 0] }

  s.chars.each_with_index do |c, i|
    k = c.ord - 97

    pairs[k][0] = i if pairs[k][0] > i
    pairs[k][1] = i if pairs[k][1] < i
  end

  pairs.map { |pair| pair[1] - pair[0] - 1 }.max
end

Solutions (Rust)

1. Solution

impl Solution {
    pub fn max_length_between_equal_characters(s: String) -> i32 {
        let mut pairs = vec![(s.len() as i32, 0); 26];

        for (i, c) in s.bytes().enumerate() {
            let pair = &mut pairs[(c - b'a') as usize];

            pair.0 = pair.0.min(i as i32);
            pair.1 = pair.1.max(i as i32);
        }

        pairs.iter().map(|(i, j)| j - i - 1).max().unwrap()
    }
}