序
本文主要記錄一下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記錄一下每個字符的下標,在遍歷字符串的時候,遇到相同的字符的時候,計算前后下標的差來得出子字符串的長度,然后通過對比記錄最長的子字符串的長度。