leetcode笔记之[1624. 两个相同字符之间的最长子字符串]

111 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第12天,点击查看活动详情

一、题目描述:

1624. 两个相同字符之间的最长子字符串 - 力扣(LeetCode)

给你一个字符串 s,请你返回 两个相同字符之间的最长子字符串的长度 ,计算长度时不含这两个字符。如果不存在这样的子字符串,返回 -1 。

子字符串 是字符串中的一个连续字符序列。

 

示例 1:

输入:s = "aa"
输出:0
解释:最优的子字符串是两个 'a' 之间的空子字符串。

示例 2:

输入:s = "abca"
输出:2
解释:最优的子字符串是 "bc" 。

示例 3:

输入:s = "cbzxy"
输出:-1
解释:s 中不存在出现出现两次的字符,所以返回 -1 。

示例 4:

输入:s = "cabbac"
输出:4
解释:最优的子字符串是 "abba" ,其他的非最优解包括 "bb"""

 

提示:

  • 1 <= s.length <= 300
  • s 只含小写英文字母

二、思路分析:

虽然是简单题的解题思路,但也可以锻炼下自己的表达能力,要把自己的想法表达清楚:

1、相同字符之间的最大距离,首先就是想到了需要记录字符串,以及他的位置信息,所以使用哈希表key:字符值 value:位置

2、遍历字符串,把字符依次放入哈希表,放入哈希表时,有两个场景:

3、场景一:如果不存在,那么该字符是第一次被遍历到,那么按照定义规则放入哈希表

4、场景二:如果存在,那么必然是第二次遍历到,这时可以用字符当前位置,减去哈希表中字符的位置,算出距离,注意要多减一个1

遍历的同时,要取出距离的最大值,就是本地答案。

三、AC 代码:


class Solution {
    public int maxLengthBetweenEqualCharacters(String s) {
        char[] ch=s.toCharArray();
        int head=0,tail=0;
        for(int i=0;i<ch.length;i++)
        {
            for(head=0,tail=ch.length-i-1;tail<ch.length;tail++,head++)
            {
                if(ch[head]==ch[tail])
                    return tail-head-1;
            }
        }
        return -1;
    }
};

四、参考:

暴力循环,最为致命。。。。 - 两个相同字符之间的最长子字符串 - 力扣(LeetCode)