leetcode-无重复字符的最长子串
程序员文章站
2022-07-13 21:18:47
...
题目描述:
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)复杂度的搜索。