欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

leetcode-无重复字符的最长子串

程序员文章站 2022-07-13 21:18:47
...

题目描述:
leetcode-无重复字符的最长子串

class Solution {
//	public static void main(String[] args){
//		System.out.println(lengthOfLongestSubstring("pwwkew") + "");
//	}
    public static int lengthOfLongestSubstring(String s) {
    	if(s.length() == 0){
    		return 0;
    	}
    	int[] charFlag = new int[256];
    	int[] allLengthOfSubString = new int[s.length()];
    	int lengthOfSubString = 0;
    	int indexOfAllLength = 0;
    	for(int i=0;i<s.length();i++){
    		for(int j=i;j<s.length();j++){
    			if(charFlag[Integer.valueOf(s.charAt(j))] == 0){
        			lengthOfSubString += 1; 
        			charFlag[Integer.valueOf(s.charAt(j))] = 1;
        			allLengthOfSubString[i] = lengthOfSubString;
        		}
        		else if(charFlag[Integer.valueOf(s.charAt(j))] == 1){
        			lengthOfSubString = 0;
        			charFlag = new int[256];
        			break;
        		}
    		}
    		
    		
    	}
    	int max = allLengthOfSubString[0]; 
    	for(int i=0;i<s.length();i++){
    		if(allLengthOfSubString[i] > max){
    			max = allLengthOfSubString[i];
    		}
    	}
        return max;
    }
}

1、先建立一个256长度的数组,数组的下标是这个字符对应的ascii码,Integer.valueOf 标识这个字符对应的ascii码。如果字符出现过,则数组中存1表明其出现过,否则位0.

2、维护一个数组,记录每一个i字符开始的无重复连续子串的长度。

3、从i=0的字符开始,找子串,如果有重复字符,则跳出循环,开始找i+1 开始的子串。

4、时间复杂度是 n方。

总结与收获:

5、本题使用了一个数组来维护 字符的唯一性,其实可以使用HashMap来存key与Value之间的关系。HashMap可以实现O(1)复杂度的搜索。

 

相关标签: 最长无重复字串