NC170. 最长不含重复字符的子字符串
描述
示例1
输入:
"abcabcbb"
输出:
3
说明:
因为无重复字符的最长子串是"abc",所以其长度为 3。示例2
输入:
"bbbbb"
输出:
1
说明:
因为无重复字符的最长子串是"b",所以其长度为 1。示例3
输入:
"pwwkew"
输出:
3
说明:
因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你的答案必须是子串的长度,"pwke" 是一个子序列,不是子串。C++ 解法, 执行用时: 3ms, 内存消耗: 528KB, 提交时间: 2021-11-28
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * f(i)以i结尾的最长不含重复子字符串长度 * * @param s string字符串 * @return int整型 */ int lengthOfLongestSubstring(string s) { if(s.size()<2)return s.size(); int curLength = 0; int maxLength = 0; vector<int> position(1000, -1); for(int i=0;i<s.size();i++){ int preIdx = position[s[i]]; if(preIdx<0||i-preIdx>curLength)curLength++; else{ if(curLength>maxLength)maxLength = curLength; curLength = i-preIdx; } position[s[i]] = i; } if(curLength>maxLength)maxLength=curLength; return maxLength; } };
C++ 解法, 执行用时: 3ms, 内存消耗: 564KB, 提交时间: 2022-02-10
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param s string字符串 * @return int整型 */ int lengthOfLongestSubstring(string s) { // write code here vector<int> dp(256,-1); int maxlen=0; int begin = -1; for(int i =0;i<s.size();i++){ if(dp[s[i]]>begin) begin = dp[s[i]]; dp[s[i]] = i; maxlen = max(maxlen,i-begin); } return maxlen; } };
Go 解法, 执行用时: 3ms, 内存消耗: 1192KB, 提交时间: 2021-11-29
package main /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param s string字符串 * @return int整型 */ func lengthOfLongestSubstring( s string ) int { if len(s)<2 { return len(s) } left,right,res :=0,0,1 m :=make([]int,256) for right <len(s){ m[s[right]]++ for m[s[right]]!=1{ m[s[left]]-- left++ } if right-left+1>res{ res =right-left+1 } right ++ } return res }
C++ 解法, 执行用时: 4ms, 内存消耗: 524KB, 提交时间: 2021-11-24
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param s string字符串 * @return int整型 */ int lengthOfLongestSubstring(string s) { int ret = 1; int bi = 0; for(int i = 1; i < s.size(); i++){ for(int j = i - 1; j >= bi; j--){ if(s.at(i) == s.at(j)){ if(i - bi > ret){ ret = i - bi; } bi = j + 1; break; } } } if(s.size() - bi > ret){ ret = s.size() - bi; } return ret; } };
C++ 解法, 执行用时: 4ms, 内存消耗: 528KB, 提交时间: 2022-01-12
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param s string字符串 * @return int整型 */ int lengthOfLongestSubstring(string s) { // write code here vector<int> dp(256, -1); int ret = 0, start = -1; for(int i = 0; i < s.length(); i++) { if(dp[s[i]] > start) start = dp[s[i]]; dp[s[i]] = i; ret = max(ret, i - start); } return ret; } };