3.lengthOfLongestSubstring

题目:Given a string, find the length of the longest substring without repeating characters.

Examples:

Given "abcabcbb", the answer is "abc", which the length is 3.

Given "bbbbb", the answer is "b", with the length of 1.

Given "pwwkew", the answer is "wke", with the length of 3. Note that the answer must be a substring"pwke" is a subsequence and not a substring.

Subscribe to see which companies asked this question.

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        
    }
};
解题思路: 具体见参考算法,这个算法会让你眼前一亮

参考算法如下:

int lengthOfLongestSubstring(string s) {
	vector<int> dict(256, -1);//ascii共占8位二进制数,共256个字符编码,其中包括a~z
	int maxLen = 0, start = -1;
	for (int i = 0; i != s.length(); i++) {
		if (dict[s[i]] > start)
			start = dict[s[i]];//发现和前面重复的字母,并改变start标志
		dict[s[i]] = i;
		maxLen = max(maxLen, i - start);
	}
	return maxLen;
}

法二:

int lengthOfLongestSubstring( std::string s )
	{
		int MaxLength = 0;
		auto left = s.begin();
		std::unordered_map<char, std::string::iterator> m;

		for ( auto p = s.begin(); p != s.end(); ++p )
		{
			left = m.find( *p ) == m.end() ? left : std::max( left, std::next( m.find( *p )->second ) );
			MaxLength = std::max( MaxLength, (int) std::distance( left, std::next( p ) ) );
			m[*p] = p;
		}

		return MaxLength;
	}




### lengthOfLongestSubstring 函数的实现分析 `lengthOfLongestSubstring` 是一个经典的算法问题,目标是找到字符串中的最长无重复字符子串的长度。以下是该函数的一个常见实现[^4]: ```python class Solution: def lengthOfLongestSubstring(self, s: str) -> int: char_index = {} # 存储字符及其索引位置 max_length = 0 # 最长子串长度 start = 0 # 当前无重复子串的起始位置 for i, char in enumerate(s): if char in char_index and char_index[char] >= start: start = char_index[char] + 1 # 更新起始位置 char_index[char] = i # 更新字符的最新索引 max_length = max(max_length, i - start + 1) # 更新最大长度 return max_length ``` 在上述代码中,`char_index` 字典用于存储字符及其对应的索引位置。通过维护一个滑动窗口(由 `start` 和当前索引 `i` 定义),可以高效地计算最长无重复子串的长度。 #### 错误原因分析 如果在第 14 行出现错误,可能的原因包括以下几种情况: 1. **输入参数类型错误**:如果传入的参数不是字符串类型,可能会导致运行时错误。例如,传入整数或列表等非字符串类型将引发异常。 2. **逻辑错误**:如果 `char_index` 的更新逻辑存在问题,可能会导致错误的结果。例如,未正确更新 `start` 或 `max_length`。 3. **边界条件处理不当**:对于空字符串或单字符字符串,如果没有正确处理边界条件,可能会导致错误结果。 为了进一步排查问题,可以检查以下内容: - 确保输入参数为字符串类型。 - 检查 `char_index` 是否正确更新。 - 验证边界条件是否被正确处理。 #### 示例测试用例 以下是一些示例测试用例及其预期输出,可用于验证函数的正确性: ```python solution = Solution() # 测试用例 1 print(solution.lengthOfLongestSubstring("abcabcbb")) # 输出: 3 # 测试用例 2 print(solution.lengthOfLongestSubstring("bbbbb")) # 输出: 1 # 测试用例 3 print(solution.lengthOfLongestSubstring("pwwkew")) # 输出: 3 # 测试用例 4 print(solution.lengthOfLongestSubstring("")) # 输出: 0 ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值