leetcode#3-Longest Substring Without Repeating Characters-java

本文探讨了如何找出字符串中最长的无重复字符子串及其长度。提供了三种解法,包括使用队列、集合以及动态规划的方法。这些解法不仅展示了不同的数据结构应用,还深入分析了每种方法的时间复杂度。

题目:

Given a string, find the length of the longest substring without repeating characters.

Examples:

Given "abcabcbb", the answer is "abc", which the length is 3.

Given "bbbbb", the answer is "b", with the length of 1.

Given "pwwkew", the answer is "wke", with the length of 3. 
Note that the answer must be a substring, 
"pwke" is a subsequence and not a substring.

解法一:

Tips:
使用queue来存储,方便在出现重复元素时,对元素进行删除,并不影响顺序
有一个点需要主要,在判断到重复元素时,进行poll操作,记得再把重复元素重新加入。

int result = 0;
Queue<Character> queue = new LinkedList<>();
for(int i=0;i<s.length();i++){
    if(queue.contains(s.charAt(i))){
        result = Math.max(result,queue.size());
        while(queue.size()!=0){
            char temp = queue.poll();
            if(temp==s.charAt(i)){
                queue.add(s.charAt(i));
                break;
            }
        }
    }else{
        queue.add(s.charAt(i));
    }
}
return Math.max(queue.size(),result);

解法二:
解法二和解法一的思路一致,但由于使用了set,限制了重复元素,不需使用双重for循环

int i = 0, j = 0, max = 0;
        Set<Character> set = new HashSet<>();
        while (j < s.length()) {
            if (!set.contains(s.charAt(j))) {
                set.add(s.charAt(j++));
                max = Math.max(max, set.size());
            } else {
                set.remove(s.charAt(i++));
            }
        }

        return max;

解法三:动规思路
由于自己现在还没有对动归有系统的学习
希望过段时间总结之后再来分析,先贴别人的代码

int lengthOfLongestSubstring(string s) {
    // for ASCII char sequence, use this as a hashmap
    vector<int> charIndex(256, -1);
    int longest = 0, m = 0;

    for (int i = 0; i < s.length(); i++) {
        m = max(charIndex[s[i]] + 1, m);    
        // automatically takes care of -1 case
        charIndex[s[i]] = i;
        longest = max(longest, i - m + 1);
    }

    return longest;
}
内容概要:本文档是一份涵盖多个科研领域的Matlab、Python及Simulink代码实现资源集,重点包括通信系统中的GMSK调制二比特差分解调、Turbo码结合BPSK或GMSK的调制解调技术研究,以及永磁同步电机控制、微电网优化、路径规划、负荷预测、风电功率预测、无人机控制、电力系统仿真、信号处理、图像处理、雷达技术、车间调度、智能优化算法等多个方向的技术实现。文档详细列举了大量基于Matlab/Simulink的仿真项目,如自抗扰控制、模型预测控制、涡轮编码调制、智能优化算法等,并提供了相关代码资源的网盘链接。同时,文档强调科研过程中逻辑思维、创新意识与“借力”工具的重要性,倡导系统性学习与实践相结合,帮助研究者高效推进课题研究与论文复现工作。; 适合人群:具备一定Matlab、Python或Simulink编程基础,从事电子信息、通信工程、电气工程、自动化、控制科学与工程、电力系统、计算机科学等相关领域的研究生、科研人员及工程师,尤其适合开展仿真类课题或需要复现顶刊论文的研究者。; 使用场景及目标:① 学习和复现现代通信系统中GMSK、BPSK调制与Turbo码结合的仿真流程;② 掌握永磁同步电机控制策略(如自抗扰、滑模控制、模型预测控制)的建模与仿真方法;③ 实现微电网能量管理、路径规划、负荷预测、风电功率预测等复杂系统的算法开发与仿真验证;④ 辅助科研论文写作与课题研究,快速搭建仿真模型并优化算法性能;⑤ 借助智能优化算法解决生产调度、路径规划、资源配置等复杂工程问题。; 阅读建议:建议读者按照文档中项目分类循序渐进地学习,优先关注自身研究方向相关的代码实例。应结合理论知识,深入理解代码逻辑,并尝试在提供的仿真模型基础上进行参数调整与功能扩展,以达到掌握核心技术与提升科研效率的目标。注意资源来源于第三方,使用时需尊重版权,避免用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值