给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
1 2 3
| 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
|
示例 2:
1 2 3
| 输入: "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
|
示例 3:
1 2 3 4
| 输入: "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
|
首次代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
| package com.bd.leetcode.leetcode_3;
import java.util.*;
class Solution { public int lengthOfLongestSubstring(String s) { String aStr = s; char[] sArr = aStr.toCharArray(); StringBuffer stringBuffer = new StringBuffer(); String max = null; int maxLength = 0;
if (0 == sArr.length) { maxLength = 0; }
if (1 == sArr.length) { maxLength = 1; }
int startIndex = 0; int endIndex = 0;
int i = 0; while (i < sArr.length) {
if (!stringBuffer.toString().contains(sArr[i] + "")) { endIndex++; if (endIndex - startIndex > maxLength) { maxLength = endIndex - startIndex; max = aStr.substring(startIndex, endIndex); } stringBuffer.delete(0, stringBuffer.length()).append(aStr.substring(startIndex, endIndex)); } else { while (endIndex <= i && startIndex < endIndex) { for (int j = endIndex - 1; j >= 0; j--) { if (sArr[j] == sArr[endIndex]) { startIndex = j + 1; break; } } endIndex++; stringBuffer.delete(0, stringBuffer.length()).append(aStr.substring(startIndex, endIndex)); } } i++; } return maxLength; }
public static void main(String[] args) { Solution s = new Solution(); int len = s.lengthOfLongestSubstring("aab"); System.out.println(len); } }
|