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


目录
相关文章
|
2天前
|
存储 JavaScript 前端开发
JavaScript中的对象是数据结构,存储键值对,键为字符串,值可为任意类型,包括函数(作为方法)
【6月更文挑战第25天】JavaScript中的对象是数据结构,存储键值对,键为字符串,值可为任意类型,包括函数(作为方法)。
8 2
|
9天前
|
JavaScript 前端开发
JavaScript进阶-模板字符串与增强的对象字面量
【6月更文挑战第19天】ES6的模板字符串和增强对象字面量提高了JavaScript的易读性和效率。模板字符串(` `)支持变量嵌入和多行,简化了字符串处理;增强对象字面量允许简写属性与方法,以及动态属性名。注意模板字符串的闭合和性能影响,以及对象字面量的简写语法和计算属性名的恰当使用。通过实例展示了这两项特性的应用,助力编写更优雅的代码。
|
13天前
|
JSON JavaScript 前端开发
js将json字符串还原为json
【6月更文挑战第15天】js将json字符串还原为json
19 4
|
13天前
|
JavaScript 前端开发
JS字符串拼接的几种方式
JS字符串拼接的几种方式
|
13天前
|
JavaScript
请用 js 去除字符串空格?
请用 js 去除字符串空格?
|
13天前
|
算法 索引 Python
二刷力扣--字符串
二刷力扣--字符串
|
14天前
|
算法 容器
【LeetCode刷题】滑动窗口解决问题:水果成篮、找到字符串中所有字母异位词
【LeetCode刷题】滑动窗口解决问题:水果成篮、找到字符串中所有字母异位词
|
16天前
|
存储 JavaScript 前端开发
JavaScript基础-字符串操作方法
【6月更文挑战第11天】本文介绍了JavaScript中字符串的基本操作,包括创建与访问、查找与替换、大小写转换等,并强调了字符串的不可变性。通过实例代码展示了如何避免常见错误,如混淆查找与替换方法、正则表达式使用不当。学习这些技巧能提升代码健壮性和效率。
|
17天前
|
存储 算法 数据挖掘
深入解析力扣166题:分数到小数(模拟长除法与字符串操作详解及模拟面试问答)
深入解析力扣166题:分数到小数(模拟长除法与字符串操作详解及模拟面试问答)
|
17天前
|
存储 算法 数据可视化
深入解析力扣161题:相隔为 1 的编辑距离(逐字符比较与动态规划详解)
深入解析力扣161题:相隔为 1 的编辑距离(逐字符比较与动态规划详解)