问题概述
给定一个字符串,任务是找出其中没有重复字符的最长子串的长度。这个问题可以通过使用滑动窗口技术来有效解决。
示例代码
public class Solution {public int FindLongestUniqueSubstr(string inputStr) {var charList = new List<char>();int maxLen = 0;foreach (var ch in inputStr) {if (charList.Contains(ch)) {charList.RemoveRange(0, charList.IndexOf(ch) + 1);}charList.Add(ch);maxLen = Math.Max(maxLen, charList.Count);}return maxLen;}}
方法解析
1. 使用一个列表来存储当前检查的无重复字符子串。
2. 遍历输入字符串的每个字符,如果字符已存在于列表中,则从列表中移除从开始到该字符位置的所有元素,以确保列表中没有重复字符。
3. 将当前字符添加到列表中,并更新最大长度值。
4. 最终返回最大长度作为结果。
深入思考
1. 在尝试解决此问题时,可能会直接考虑使用字符串的索引来比较不同子串的长度,但这可能无法处理所有情况,例如当输入为“pwwkew”时,正确的答案应该是“wke”,而不是“pw”。
2. 滑动窗口的概念类似于一个队列,这里的“窗口”指的是满足条件的子串。通过不断调整窗口的起始和结束位置,我们可以动态地维护这个子串,同时记录其最大长度。