问题是找出一串字符串中最长的且没有重复字符的字符串,思路上也很简单。
设数列为:
A[123⋯n]
设发生重复的位置为 p ,重复的字符第一次出现在位置
1≤p<q
可以证明,下次搜索时只需要搜到 p−1 处即可,至于证明,用反证法证明即可,很简单。以下是代码实现
//leetcode 003
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int algo(const string &str){
int size=str.size();
if(size==0)
return 0;
int len[size];
for(int i=0;i<size;i++)
len[i]=-1;
int pos=-1;
for(int i=0;i<size;i++){
len[i]=1;
for(int j=i-1;j>pos;j--){
if(str[i]==str[j]){
pos=j;
break;
}
len[i]+=1;
}
}
return *std::max_element(len,len+size);
}
int main(int argc,char **argv){
string str="pwwp";
auto size=str.size();
int len[size];
std::fill(len,len+size,0);
cout<<algo(str)<<endl;
return 0;
}