请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。
示例 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; } }