今天在刷leetcode的时候刷了一个题目https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/submissions/
看看结果:优化前
优化后:
思路用滑动窗口:
class Solution {
public:
int hasChar(string s, int beg, int ends, char c){
for(int i=0;i<ends-beg;i++){
if(s[i+beg]==c){
return i+beg+1;
}
}
return beg;
}
int lengthOfLongestSubstring(string s) {
if(s.length()==0)
return 0;
int max=0;
int beg=0;
int ends=1;
while(ends<=s.length()){
int pos = hasChar(s,beg,ends,s[ends]);
if(max<ends-beg){
max = ends-beg;
}
beg=pos;
ends++;
}
return max;
}
};
第一种方法是减少调用:
class Solution {
public:
int lengthOfLongestSubstring(string s) {
if(s.empty())
return 0;
if(s.size() == 1)
return 1;
int max = 1;
int i = 0, j = 1, k;
while(j < s.size())
{
for(k = i;k < j;k++)
{
if(s[k] == s[j])
{
i = k + 1;
break;
}
}
j++;
if(j-i > max)
max = j-i;
}
return max;
}
};
后来想到传引用也是可以解决的:
class Solution {
public:
int hasChar(string &s, int &beg, int &ends, char &c){
for(int i=0;i<ends-beg;i++){
if(s[i+beg]==c){
return i+beg+1;
}
}
return beg;
}
int lengthOfLongestSubstring(string s) {
if(s.length()==0)
return 0;
int max=0;
int beg=0;
int ends=1;
while(ends<=s.length()){
int pos = hasChar(s,beg,ends,s[ends]);
if(max<ends-beg){
max = ends-beg;
}
beg=pos;
ends++;
}
return max;
}
};