[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 = -1
    for(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)。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_46277553/article/details/130092973