public int lengthOfLongestSubstring(String s) {
//using a Collection to check if duplicate elements exist.
int count = 0;
int max = 0;
ArrayList<String> str = new ArrayList();
for(int i =0; i< s.length();i++){
String temp = Character.toString(s.charAt(i));
if(str.contains(temp)){
int idx = str.indexOf(temp);
for(int j = 0; j<= idx;j++) // clear all the elements before the duplicate elements, inluding the
str.remove(0); //duplicate. So, no elements collision in the new list.
str.add(temp);
count = str.size(); // update the count - the size of the new list.
}else {
str.add(temp);
count++;
if(count>max)
max=count;
}
}
return max;
}
嗨,什么是时间和空间分析?我认为空间复杂度为O(n),但是时间复杂度取决于重复字符的数量,因为只有在遇到重复字符时才删除元素。 谢谢!
答案 0 :(得分:0)
您所说的空间复杂度是O(n ^ 2)。
但是时间复杂度将为O(n ^ 2),因为您每次都在arraylist上进行线性搜索以查找char是否重复
if(str.contains(temp))
在这一行。是O(k),其中k是arrayList的大小
考虑所有独特元素的示例
对于i = 1,您将进行1次手术
对于i = 2,您将进行2次操作
对于i = n,您将进行n次操作
总时间复杂度= O(1 + 2 + ... + n)= O(n ^ 2)