最长不含重复字符的子字符串 算法
题目:
请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。
示例 1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
运行截图:
在力扣尝试多种方法,最好的结果是使用字符数组,用时、内存消耗击败90%以上Java提交者。
保存下来吹下牛哈!
源代码:
class Solution { public int lengthOfLongestSubstring(String s) { final int SIZE = s.length(); //源字符串长度 if (SIZE<2) { return SIZE; } char[] str = new char[SIZE]; //用字符数组保存字符串 s.getChars(0, SIZE, str, 0); s=null; int start = 0; //子串起始点 int end = 1; //子串末尾 int result = 1; //最长子串长度 boolean flag = false; //是否有重复字符 int i=0; while (end < SIZE) { flag = true; for (i=start; i<end; ++i) { //检查新加入的字符str[end]是否重复 if (str[i] == str[end]) { flag = false; start = ++i; //在i位置重复,新子串从i+1开始 break; } } ++ end; //继续往前搜索 if (flag) { //flag == true 没有发现重复字符 if (end > start + result) { //发现更好结果 result = end - start; } } if (SIZE < start + result){ //不可能有更好结果,提前结束 break; } } return result; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理