题目
Given a string s
, find the length of the longest substring without repeating characters.
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串的长度。
示例
1 2
| Input: s = "abcabcbb" Output: 3
|
1 2
| Input: s = "bbbbb" Output: 1
|
1 2
| Input: s = "pwwkew" Output: 3
|
思路
如果为空,输出0;否则至少输出1。
进入while循环判断是否满足停止条件,以及对于长度进行保存。
解法1 自己的求解
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
| public int lengthOfLongestSubstring(String s) { int num = 1, cb = 0, cursor = 0, numres = 0; int sL = s.length(); while ((sL - cursor) >= 1) { for (int i = 0; i < cursor-cb; i++) { if (s.charAt(cursor) == s.charAt(cb + i)) { num=cursor-cb-i; cb=cb+i+1; break; } } numres = num > numres ? num : numres; if (cursor < sL-1) { cursor++; num++; } else { break; } } return numres; }
|
标准解法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| public int lengthOfLongestSubstring(String s) { 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; }
|
优缺点
我的循环可能过多,在while里面还有一个for,而且我也没有用到set集合,只是简单的遍历
但是我的while比他少,我可以在for里面直接定位到那一个最确切的元素位置,不需要进行很多次while循环