华为手撕真题【最长不重复子串】c++
时间: 2023-12-22 07:01:34 浏览: 151
寻找最长不重复子串
最长不重复子串是指在一个字符串中没有重复字符的最长子串。解决这个问题可以使用滑动窗口的方法,通过移动窗口的左右边界来找到最长的不重复子串。
首先,我们可以使用一个哈希表来存储每个字符最后出现的位置。然后,使用两个指针left和right来标记滑动窗口的左右边界,初始化left和right都为0。然后我们开始遍历字符串,当遇到重复字符时,更新左边界left为重复字符的位置加1,并且更新哈希表中重复字符的位置。在遍历过程中,每次更新滑动窗口的长度并记录最大长度。
当遍历结束时,我们就可以得到最长的不重复子串的长度。
举个例子来说明,对于字符串"abcabcbb",当right遍历到第二个a时,更新left为1,此时得到长度为3的子串"bca"。继续遍历,当right遍历到第二个b时,更新left为3,此时得到长度为3的子串"abc"。继续遍历,当right遍历到第二个c时,更新left为4,此时得到长度为3的子串"bca"。继续遍历,当right遍历到第二个b时,更新left为5,此时得到长度为3的子串"cab"。遍历结束,得到最长的不重复子串为"abc",长度为3。
通过这种方法,我们可以高效地找到最长的不重复子串。
阅读全文