leetcode之兩個相同字符之間的最長子字符串

本文主要記錄一下leetcode之兩個相同字符之間的最長子字符串

題目

給你一個字符串 s,請你返回 兩個相同字符之間的最長子字符串的長度 ,計算長度時不含這兩個字符。如果不存在這樣的子字符串,返回 -1 。

子字符串 是字符串中的一個連續(xù)字符序列。

 

示例 1:

輸入:s = "aa"
輸出:0
解釋:最優(yōu)的子字符串是兩個 'a' 之間的空子字符串。
示例 2:

輸入:s = "abca"
輸出:2
解釋:最優(yōu)的子字符串是 "bc" 。
示例 3:

輸入:s = "cbzxy"
輸出:-1
解釋:s 中不存在出現(xiàn)出現(xiàn)兩次的字符,所以返回 -1 。
示例 4:

輸入:s = "cabbac"
輸出:4
解釋:最優(yōu)的子字符串是 "abba" ,其他的非最優(yōu)解包括 "bb" 和 "" 。
 

提示:

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

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/largest-substring-between-two-equal-characters
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。

題解

class Solution {
    public int maxLengthBetweenEqualCharacters(String s) {
        Map<Character, Integer> map = new HashMap<>();
        int result = -1;
        for (int i = 0; i < s.length(); i++) {
            if (!map.containsKey(s.charAt(i))){
               map.put(s.charAt(i),i);
               continue;
            }
            Integer idx = map.get(s.charAt(i));
            result = Math.max(result,i-idx-1);
        }
        return result;
    }
}

小結(jié)

這里用HashMap記錄一下每個字符的下標,在遍歷字符串的時候,遇到相同的字符的時候,計算前后下標的差來得出子字符串的長度,然后通過對比記錄最長的子字符串的長度。

doc

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容