LeetCode刷题2:无重复字符的最长子串
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串的长度。
//方法一:利用hashmap,将start移到重复字符的后一个位置,max(end-start+1,ans)即为最长子串长度
class Solution { public int lengthOfLongestSubstring(String s) { Map<Character,Integer> map=new HashMap(); int len=s.length(); int ans=0;//记录最长子串长度 for(int end=0,start=0;end<len;end++){ char c=s.charAt(end); if(map.containsKey(c)) start=Math.max(map.get(c)+1,start);//更新最长子串起始点,记住+1 ans=Math.max(end-start+1,ans); map.put(c,end);//若子串含有c则更新,否则添加新的关系对 } return ans; } }
//方法二:设置flag,若在当前最大字串内能找到与当前s[i]相同的元素,则flag=pos+1;
class Solution { public int lengthOfLongestSubstring(String s) { int length = s.length(); int max = 0,result=0; int i=0,flag=0; while(i<length) { int pos=s.indexOf(s.charAt(i),flag);//返回从 index 位置开始查找指定字符str在字符串中第一次出现处的起始索引,如果此字符串中没有这样的字符,则返回 -1 if(pos<i) { if(result>max) max=result; result=i-pos-1; flag=pos+1; } i++; result++; } if(result<max) return max; else return result; } }

浙公网安备 33010602011771号