【JavaScript】Leetcode 3.无重复字符的最长子串

该博客介绍了如何解决LeetCode中的3号问题——找到字符串中不含有重复字符的最长子串。文章通过暴力思路(双指针遍历,时间复杂度328ms)和滑动窗口解法(左指针和右指针构造滑动窗口,时间复杂度O(N))进行了详细讲解,并提供了相关链接和代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

示例

示例 1:

输入: "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

示例 2:

输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。

示例 3:

输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
     请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

暴力思路

双指针遍历。存个临时字符串tempString,使用双指针i,j,从头开始,i不动,j往后移动,临时字符串逐个增加字符,一旦碰到和位置i字符重复的字符(判断方法是用indexof()),临时字符串清空,i往后移动一位,j重新从i后面开始移动。耗时328ms

var lengthOfLongestSubstring = function(s) {
    if (s.length <=1){
        return s.length;
    }
    let max = 0;
    let tempString = s[0];
    let i=0,j=1;
    while(j<s.length){
        if(tempString.indexOf(s[j])>=0){
            max = max > (j-i)? max:(j-i);
            i++;
            j=i+1;
            tempString =s[i];
            continue;
        }
        tempString += s[j];
        j++;
    }
    if(tempString.length>max){max = tempString.length;}
    return max;
};
滑动窗口解法

看了官方题解,滑动窗口解法。也是双指针,左指针和右指针构造了一个滑动的窗口。每一轮将左指针向右移动一格,不断地向右移动右指针,直到遇到重复的字符。在移动结束后,这个子串就对应着以左指针开始的,不包含重复字符的最长子串。

时间复杂度:O(N),其中 N 是字符串的长度。左指针和右指针分别会遍历整个字符串一次。空间复杂度最多有O(128),128是字符集的长度

作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/solution/wu-zhong-fu-zi-fu-de-zui-chang-zi-chuan-by-leetc-2/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

var lengthOfLongestSubstring = function(s) {
    if (s.length==0||s.length==1) return s.length;
    let right=-1,ans=0;
    let occ = new Set();
    for(let left=0;left<s.length-1;left++){
        if(left!=0){
            occ.delete(s[left-1]);  
        }
        for(;right<s.length;right++){
            if(occ.has(s[right])){
                break;
            }
            occ.add(s[right]);
        }
        ans = Math.max(ans,right-left);
    }
    return ans;
};
内容概要:该论文探讨了一种基于粒子群优化(PSO)的STAR-RIS辅助NOMA无线通信网络优化方法。STAR-RIS作为一种新型可重构智能表面,能同时反射和传输信号,与传统仅能反射的RIS不同。结合NOMA技术,STAR-RIS可以提升覆盖范围、用户容量和频谱效率。针对STAR-RIS元素众多导致获取完整信道状态信息(CSI)开销大的问题,作者提出一种在不依赖完整CSI的情况下,联合优化功率分配、基站波束成形以及STAR-RIS的传输和反射波束成形向量的方法,以大化总可实现速率并确保每个用户的低速率要求。仿真结果显示,该方案优于STAR-RIS辅助的OMA系统。 适合人群:具备一定无线通信理论基础、对智能反射面技术和非正交多址接入技术感兴趣的科研人员和工程师。 使用场景及目标:①适用于希望深入了解STAR-RIS与NOMA结合的研究者;②为解决无线通信中频谱资源紧张、提高系统性能提供新的思路和技术手段;③帮助理解PSO算法在无线通信优化问题中的应用。 其他说明:文中提供了详细的Python代码实现,涵盖系统参数设置、信道建模、速率计算、目标函数定义、约束条件设定、主优化函数设计及结果可视化等环节,便于读者理解和复现实验结果。此外,文章还对比了PSO与其他优化算法(如DDPG)的区别,强调了PSO在不需要显式CSI估计方面的优势。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值