Problem3:lengthOfLongestSubstring

来源:互联网 发布:linux还原备份命令 编辑:程序博客网 时间:2024/06/13 17:31

这道题通过看别人的,看到了很多不一样的实现方法,现在把它都记录下来,有更好的方法的欢迎初学者一起探讨交流哦~~~~

package pratice.leetcode;import java.util.*;public class problem3 {//Time complexity : O(n^3).//public static boolean allUnique(String s,int start,int end){//Set<Character> set=new HashSet<>();//for(int i=start;i<end;i++){//char c=s.charAt(i);//if(set.contains(c))//return false;//set.add(c);//}//return true;//}//public static int lengthOfLongestSubstring(String s) {//int ans=0;//for(int i=0;i<s.length();i++){//for(int j=i+1;j<=s.length();j++){//if(allUnique(s,i,j)) //ans=Math.max(ans, j-i);//}//}//return ans;//}//Map实现,Map中不允许key值重复public static int lengthOfLongestSubstring(String s) {int ans=0;if(s.length()==0)return ans;Map<Character,Integer> map=new HashMap<>();for(int i=0,j=0;j<s.length();j++){if(map.containsKey(s.charAt(j))){i=Math.max(map.get(s.charAt(j)), i);}ans=Math.max(ans, j-i+1);map.put(s.charAt(j), j+1);}return ans;}//Sliding Window//public static int lengthOfLongestSubstring(String s) {//        int n = s.length();//        Set<Character> set = new HashSet<>();//        int ans = 0, i = 0, j = 0;//        while (i < n && j < n) {//            // try to extend the range [i, j]//            if (!set.contains(s.charAt(j))){//                set.add(s.charAt(j++));//                ans = Math.max(ans, j - i);//            }//            else {//                set.remove(s.charAt(i++));//            }//        }//        return ans;//    }        //当输入是pwwkew时错误,最初的实现,有问题的!!!//public static int lengthOfLongestSubstring(String s) {//        Map<Character,Integer> map=new HashMap<>();//        int flag=0;//        for(int i=0;i<s.length();i++){//        char c=s.charAt(i);//        if(!map.containsKey(c)){//        map.put(c, flag++);//        }//        }//        return flag;//}   public static void main(String[] args){String s="aussuaab";System.out.println(lengthOfLongestSubstring(s));}}


原创粉丝点击