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.

解题思路1,o(n):

新建一个字符串变量sub用来保存当前处理的子字符串,从起始遍历原字符串S中的每个字符;

对于每一个遍历到的字符S[i]:

  如果S[i]已存在sub中(例sub[j] = S[i]),则sub切掉sub[j]及其之前的所有字符,并在末尾插入S[i];

  如果S[i]不存在sub中,则在sub末尾插入S[i]。

  遍历过程中,随时记录sub曾经达到的最大长度maxlength

遍历结束,返回maxlength;

代码:

 class Solution {
public:
int lengthOfLongestSubstring(string s) {
int string_length = s.size();
if (string_length <= )
return string_length; string substring = string(, s[]);
int current_length = ;
int max_length = ; for (int i = ; i < string_length; ++i) { //current_length + string_length - i > longest_length
int pos = substring.find(s[i]);
if (pos != -) {
substring = substring.substr(pos + ) + s[i];
current_length -= pos;
} else {
substring += s[i];
current_length++;
if (current_length > max_length)
max_length = current_length;
}
} return max_length;
}
};

解题思路2,o(n):

用一个128个元素的int型数组postions,记录字符串中的每个字符,在字符串中上次出现的位置(之前从未出现则为-1);同时用一个int变量ind记录子串的开始位置;

当遍历到字符串某一个元素S[i]时:

  查看postion数组中记录的此字符上次出现的位置positions[S[i]],

  如果positions[S[i]]大于ind,说明S[i]在当前子串中有重复,则ind = positions[S[i]] + 1;

  如果positions[S[i]]小于ind,说明当前子串中,不包含S[i],则ind不变;

  随时记录子串的最大长度(i - ind + 1)

循环结束,返回最大长度值。

代码:

 class Solution {
public:
int lengthOfLongestSubstring(string s) {
int positions[];
memset(positions, -, sizeof(positions)); int ind = ;
int max = ;
for (int i = ; i < s.size(); i++){
if (positions[s[i]] >= ind)
ind = positions[s[i]] + ; if (i - ind + > max)
max = i - ind + ; positions[s[i]] = i;
} return max;
}
};

附录:

C++ string操作

最新文章

  1. Delphi常用关键字用法详解
  2. mysql 事件调度
  3. PHP之echo/print
  4. OpenGL-选择与拾取
  5. function的prototype
  6. PowerDesigner的样式设置
  7. oracle数据库性能调优
  8. spring Transaction Management --官方
  9. 九度OJ 1372 最大子向量和(连续子数组的最大和)
  10. 爬虫总结_java
  11. DFS PKU 1562
  12. PHP 分析1
  13. Hadoop webHDFS设置和使用说明
  14. 蓝桥网试题 java 基础练习 十进制转十六进制
  15. CentOS 6.4 配置 Hadoop 2.6.5
  16. Wooden Sticks---(贪心)
  17. CentOS 系列安装 Docker
  18. bzoj 1798: [Ahoi2009]Seq 维护序列seq (线段树 ,多重标记下放)
  19. FreeSWITCH媒体转码配置
  20. Docker深入浅出3-容器管理

热门文章

  1. Android可见APP的不可见任务栈(TaskRecord)销毁分析
  2. jQuery 学习笔记(TryjQuery)
  3. WPF中的快捷键(累积中)
  4. .netCore2.0 依赖注入
  5. [转]Using MVC 6 And AngularJS 2 With .NET Core
  6. Java复习第二天
  7. 阿里云服务器(ECS)购买及配置总结
  8. webpack使用extract-text-webpack-plugin打包时提示错误Use Chunks.groupsIterable and filter by instanceof Entryp
  9. weblogic11g(10.3.6)部署war包时,解决jar包冲突的超简方案
  10. 百度富文本Ueditor将图片存在项目外路径并回显