Problem3:lengthOfLongestSubstring

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

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));
	}
}


猜你喜欢

转载自blog.csdn.net/u010843421/article/details/78742188