java求不重复最长子串及其长度

您所在的位置:网站首页 最长子串的长度 java求不重复最长子串及其长度

java求不重复最长子串及其长度

2024-07-13 16:07| 来源: 网络整理| 查看: 265

本题要求传入一个字符串,求出不重复最长子串的长度,但 我在求最大长度的基础上,增加了输出最长子串 示例 1: 输入: s = “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 示例 2: 输入: s = “pwwkew” 输出: 3 解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。 思路: 通过hashmap的key值唯一来判断是否出现重复字符,当未出现重复字符,会判断是否为最大长度,如果是则记录最长子串的开始下标,当出现重复子串,将记录长度归零,并且清空字符串,再回溯到第一个重复字符那里继续循环判断。

public static int lengthOfLongestSubstring(String s) { //将字符串转为字符数组 char[] c = s.toCharArray(); //用于记录字符串,key存字符,value存下标 HashMap map = new HashMap(); int max=0;// 记录最大长度 int len =0;// 判断用的长度 int startIndex = 0;//记录最长子串的下标 //对字符数组进行遍历,采用滑动窗口的方法 for (int end = 0,start=0; end max){ max = len; startIndex=start; } } } //截取最长子串并输出(左闭右开) System.out.println(s.substring(startIndex,startIndex+max)); return max; }

只记录长度的版本(效率比上面高)

public static int lengthOfLongestSubstring(String s) { char[] c = s.toCharArray(); HashMap map = new HashMap(); int max=0; for (int end = 0,start=0; end


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3