Leetcode-3 无重复字符的最长子串【c语言】
生活随笔
收集整理的這篇文章主要介紹了
Leetcode-3 无重复字符的最长子串【c语言】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目
給定一個字符串 s ,請你找出其中不含有重復字符的最長子串的長度。
示例 1:
輸入: s = “abcabcbb”
輸出: 3
解釋: 因為無重復字符的最長子串是 “abc”,所以其長度為 3。
示例 2:
輸入: s = “bbbbb”
輸出: 1
解釋: 因為無重復字符的最長子串是 “b”,所以其長度為 1。
示例 3:
輸入: s = “pwwkew”
輸出: 3
解釋: 因為無重復字符的最長子串是 “wke”,所以其長度為 3。
請注意,你的答案必須是 子串 的長度,“pwke” 是一個子序列,不是子串。
示例 4:
輸入: s = “”
輸出: 0
提示:
0 <= s.length <= 5 * 104
s 由英文字母、數字、符號和空格組成
代碼
字符對應阿斯克碼,i指向不重復子串的第一個位置,j指向不重復子串的最后一個位置,那么這個子串的長度就是j-i+1。
我們移動j,如果說這個j以前出現過,那么就移動左側的i,如果說移動到i的位置對應元素剛好就是j的元素,那么就說明找到了重復的數,此時S[s[i]]= S[s[j]],那么經過S[s[i]]–就可以讓S[s[j]]=1,也就是說,再讓i向右移動,此時i和j夾起來的字符串時沒有重復的字符的。
每次更新最長子串長度即可。
int lengthOfLongestSubstring(char * s){int len = strlen(s);if(len == 0)return 0;int S[256] = {0};int i, j, m = 0;for(i = 0, j = 0; j < len; j++){S[s[j]]++;while(S[s[j]] > 1){S[s[i]]--;i++;}if(m<j-i+1) m=j-i+1;}return m; }總結
以上是生活随笔為你收集整理的Leetcode-3 无重复字符的最长子串【c语言】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cortex-m3 操作模式 寄存器组
- 下一篇: stm32 SysTick