题目编号
3 209
3. 无重复字符的最长子串
解题思路
一开始以子串的长度为基准,发现循环中的代码非常复杂,一不注意就出错,后来看了评论才知道应该以左边的数字为基准,外层循环遍历整个字符串,内层循环遍历当前子串是否有相同的字符。
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| class Solution { public int lengthOfLongestSubstring(String s) { int maxCount = 0; int left = 0; char[] sToChar = s.toCharArray(); for (int i = 0; i < s.length(); i++) { for (int in = left; in < i; in++) { if (sToChar[in] == sToChar[i]) { maxCount = Math.max(maxCount, i - left); left = in + 1; break; } } } maxCount = Math.max(maxCount, sToChar.length - left); return maxCount; } }
|
209. 长度最小的子数组
解题思路
暴力破解法:
- 从第一个数开始往后加,加到满足条件看有几个元素,
- 从第二个数开始往后加,加到满足条件看有几个元素,然后跟第一个比较,
- 从第三个数开始往后加,加到满足条件看有几个元素,然后跟第二个比较,
- 。。。得出结果
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| class Solution { public int minSubArrayLen(int s, int[] nums) { int len = nums.length + 1; int i = 0; for (; i < nums.length; i++) { int right = i; int sum = 0; for (; right < nums.length; right++) { sum += nums[right]; if (sum >= s) { len = Math.min(len, right - i + 1); break; } } } return len == nums.length + 1 ? 0 : len; } }
|