> 文章列表 > [Javascript - 力扣每日一题] 1624. 两个相同字符之间的最长子字符串

[Javascript - 力扣每日一题] 1624. 两个相同字符之间的最长子字符串

[Javascript - 力扣每日一题] 1624. 两个相同字符之间的最长子字符串

题目描述:

给你一个字符串 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 。

代码实现:

/* @param {string} s* @return {number}*/
var maxLengthBetweenEqualCharacters = function(s) {let maxLen = -1for(let i =0;i<s.length;i++){const j = s.lastIndexOf(s[i])if(j>i) {maxLen = Math.max(maxLen,j-i-1)}}return maxLen
};

时间复杂度:O(n^2)。

空间复杂度:O(1)。

[Javascript - 力扣每日一题] 1624. 两个相同字符之间的最长子字符串