leetcode 3 --- 无重复字符的最长子串
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                leetcode 3 --- 无重复字符的最长子串
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                1 題目
給定一個字符串,請你找出其中不含有重復字符的?最長子串?的長度。
2 思路
2.1 迭代思路
剛開始的想法肯定是暴力解法, 遍歷字符串每一個字符, 看以當前字符為起點的最長無重復子串有多長, 這樣做有一個可以優化的地方, 比如以當前循環到的字符起點A, 找到了以A為起點的最長無重復子串的終點B, 也就是說從字符A到B之間的所有字符都是不重復的,那么A的下一個到B的子所有字符也都是不重復的, 所以下一次遍歷的左側起點肯定是A下一個, 右側起點就可以直接從B下一個開始.
2.2 判定當前字符是否與之前字符重復
前文說到的判定字符是否與起點之間的字符有重復, 需要進行一個判斷, 力扣建議的方法是用unordered_set, 我最開始用的是set, 發現性能確實不如set好.
3 代碼
class Solution { public:int lengthOfLongestSubstring(string s) {int str_size = s.size();if (str_size < 2) {return str_size;}int res_length = 0;int left = -1;int right = 0;unordered_set<char> tSet;while (right < str_size) {if (left >= 0) {tSet.erase(s[left]);}left ++;while (right < str_size && tSet.count(s[right]) == 0) {tSet.insert(s[right]);right ++;}int current_length = right - left;if (current_length > res_length) {res_length = current_length;}}return res_length;} };?
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的leetcode 3 --- 无重复字符的最长子串的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: C++ STL 容器 string
- 下一篇: 一键装机linux_(推荐)linux用
