【算法百题之三十】无重复字符的最长子串
大家好,我是Lampard~~
很高兴又能和大家见面了,接下来准备系列更新的是算法题,一日一练,早日升仙!
今天的问题是:
思路:这道题考察的主要是对string类的使用,对链表进行便利的过程中记录目前为止最长的字串以及当前记录的字串,若遇到重复的字符,则对当前字串和最长字串进行更新。
在解题的过程中,我们主要使用到一下几个string的函数:
string.length() // 返回当前字符串的长度
string.find(str, index) // 寻找str出现的位置,有则返回下标,无则返回-1.index定义字符串开始查找的位置
string.substr(begin,end) // 对字符串begin~end位置的字串进行截取,若end不填则截取到字符串末
实现的代码:
int lengthOfLongestSubstring(string s) {
string maxStr;
string curStr;
for (int i = 0; i < s.length(); i++) {
int index = curStr.find(s[i]);
if (index != -1) {
maxStr = curStr.length() > maxStr.length() ? curStr : maxStr;
curStr = curStr.substr(index + 1);
}
curStr = curStr + s[i];
}
maxStr = curStr.length() > maxStr.length() ? curStr : maxStr;
return maxStr.length();
}
以上是按照思路这道题的解法,关键点有两个:
- 遇到重复的字符时,对maxStr进行更新
- 循环遍历后要记得再次对masStr进行赋值,因为最后记录的curStr有可能比maxStr还要长
测试函数以及测试结果: