Descrition:
Given a string, find the length of the longest substring without repeating characters. For example, the
longest substring without repeating letters for “abcabcbb” is “abc”, which the length is 3. For “bbbbb” the
longest substring is “b”, with the length of 1.
解析:
本题可以利用贪心算法思想,用一个数组记录所有字符在字符串中出现的位置,然后根据起始位置来判断;
注:本例所有代码均在本地VS2015上测试通过;
代码如下:
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
class Solution {
public:
int LengthOfLongestSubstring(const string& str) {
if (str.size() == 0) return 0;
const int ASCII_MAX = 255;
int last[ASCII_MAX];
fill(last, last + ASCII_MAX, -1);
int start = 0, max_len = 0;
for (int i = 0; i < str.size();++i) {
if (last[str[i]] >= start) {
max_len = max(i - last[str[i]],max_len);
start = last[str[i]]+1;
}
last[str[i]] = i;
}
return max(max_len,(int)str.size() - start);
}
};
int main(int argc,char** argv) {
string test = "abcabcdefabcdefghb";
Solution demo;
cout << "result:" << demo.LengthOfLongestSubstring(test) << endl;
system("pause");
return 0;
}
结果如下: