扬仔的杂货铺

分享微不足道的经验,记录稀奇古怪的玩意

0%

两个相同字符之间的最长子字符串

两个相同字符之间的最长子字符串

题目详情

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

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

示例 1

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

示例 2

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

示例 3

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

示例 4

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

解题方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Solution {
public int maxLengthBetweenEqualCharacters(String s) {
// 最后结果保存
int result = -1;
// 字符串转换成char类型数组
char[] chars = s.toCharArray();
for (int i = 0; i < chars.length; i++) {
// 如果结果已经大于数组的剩余长度,直接返回(就算有解肯定也不能大于result)
if (result > chars.length - i - 1){
break;
}
// 从后向前查找i开始剩下的字符串是否有相同字符
int i1 = s.substring(i).lastIndexOf(chars[i]) + i;
// 如果找到,计算之间的长度
if (i1 > 0){
int temp = i1 - i - 1;
if (temp > result){
result = temp;
}
}
}
return result;
}
}