题目链接
(求最长不重复的子串)

代码

  1. class Solution {
  2. public:
  3. int lengthOfLongestSubstring(string s) {
  4. map<char, int> prePos; /* 记录上一次出现的位置 例如prePos['f']=3 代表字符'f'上次出现在3的位置 */
  5. // 结果
  6. int result = 0;
  7. // 当前长度
  8. int len = 0;
  9. for (int i = 0; i < s.length(); i++) {
  10. if (prePos.find(s[i]) == prePos.end()) {
  11. len++;
  12. } else {
  13. if (i - (len + 1) + 1 > prePos[s[i]]) {
  14. len++;
  15. } else {
  16. len = i - prePos[s[i]];
  17. }
  18. }
  19. prePos[s[i]] = i;
  20. result = max(len, result);
  21. }
  22. return result;
  23. }
  24. };