第一题: char[] chars = s.toCharArray(); //记录不同的字符,并将值置为2 HashMap<Character, Integer> map = new HashMap<>(); for (char aChar : chars) { map.put(aChar, 2); } int left = 0; int right = 0; // 从左往右遍历 直到当前窗口包含所有字符 遍历结束后得到 从左往右最长的字符串 for (int i = 0; i < chars.length; i++) { // 为2 说明当前字符没有加入当前窗口中 所以加入并将值设为1 if (map.get(chars[i]) == 2) { //加入后 当前字符就不必考虑了 map.put(chars[i], 1); //更新右边区间 right = i; } } // 从右往左遍历 直到当前窗口包含所有字符 遍历结束后得到 从左往右最短的字符串 for (int i = right; i >= 0; i--) { // 为1 说明当前字符没有加入当前窗口 所以加入并将值设为0 if (map.get(chars[i]) == 1) { //加入后 当前字符就不必考虑了 map.put(chars[i], 0); //更新左边区间 left = i; } } return new int[]{left,right-left+1}; 优化一下,可以提前终止,想不到其他的了,太菜了
点赞 评论

相关推荐

秋盈丶:后续:我在宿舍群里和大学同学分享了这事儿,我好兄弟气不过把他挂到某脉上了,10w+阅读量几百条评论,直接干成精品贴子,爽
点赞 评论 收藏
分享
牛客网
牛客企业服务