小編給大家分享一下編程語言中無重復字符最長子串的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
青陽網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、APP開發(fā)、響應式網(wǎng)站開發(fā)等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)從2013年成立到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設就選創(chuàng)新互聯(lián)。
給定一個字符串,找出不含有重復字符的 最長子串 的長度。
示例:
給定 `"abcabcbb"` ,沒有重復字符的最長子串是 `"abc"` ,那么長度就是3。
給定 `"bbbbb"` ,最長的子串就是 `"b"` ,長度是1。
給定 `"pwwkew"` ,最長子串是 `"wke"` ,長度是3。請注意答案必須是一個 子串 , `"pwke"` 是 _子序列_ 而不是子串。
1. Swift 語言
class LongestSubstringWithoutRepeatingCharacters { func lengthOfLongestSubstring(_ s: String) -> Int { var longest = 0, left = 0, set = Set() let sChars = Array(s) for (i, char) in sChars.enumerated() { if set.contains(char) { longest = max(longest, i - left) while sChars[left] != char { set.remove(sChars[left]) left += 1 } left += 1 } else { set.insert(char) } } return max(longest, sChars.count - left) } }
2. JavaScript 語言
/** * @param {string} s * @return {number} */ var lengthOfLongestSubstring = function(s) { var hash = {}; var start = 0; var ans = 0; for (var i = 0, len = s.length; i < len; i++) { var item = s[i]; if (!hash[item]) hash[item] = true; else { // item 已經(jīng)在 substring 中存在了 for (; ;) { if (s[start] === item) { start++; break; } hash[s[start]] = false; start++; } } ans = Math.max(ans, i - start + 1); } return ans; };
3. Python 語言
class Solution(object): def _lengthOfLongestSubstring(self, s): """ :type s: str :rtype: int """ d = collections.defaultdict(int) l = ans = 0 for i, c in enumerate(s): while l > 0 and d[c] > 0: d[s[i-l]] -= 1 l -= 1 d[c] += 1 l += 1 ans = max(ans, l) return ans def lengthOfLongestSubstring(self, s): d = {} start = 0 ans = 0 for i,c in enumerate(s): if c in d: start = max(start, d[c] + 1) d[c] = i ans = max(ans, i - start + 1) return ans
4. Java 語言
// 方式一 public class Solution { public int lengthOfLongestSubstring(String s) { int n = s.length(); int ans = 0; for (int i = 0; i < n; i++) for (int j = i + 1; j <= n; j++) if (allUnique(s, i, j)) ans = Math.max(ans, j - i); return ans; } public boolean allUnique(String s, int start, int end) { Setset = new HashSet<>(); for (int i = start; i < end; i++) { Character ch = s.charAt(i); if (set.contains(ch)) return false; set.add(ch); } return true; } } // 方式二 public class Solution { public int lengthOfLongestSubstring(String s) { int n = s.length(); Set set = new HashSet<>(); int ans = 0, i = 0, j = 0; while (i < n && j < n) { // try to extend the range [i, j] if (!set.contains(s.charAt(j))){ set.add(s.charAt(j++)); ans = Math.max(ans, j - i); } else { set.remove(s.charAt(i++)); } } return ans; } } // 方式三 public class Solution { public int lengthOfLongestSubstring(String s) { int n = s.length(), ans = 0; Map map = new HashMap<>(); // current index of character // try to extend the range [i, j] for (int j = 0, i = 0; j < n; j++) { if (map.containsKey(s.charAt(j))) { i = Math.max(map.get(s.charAt(j)), i); } ans = Math.max(ans, j - i + 1); map.put(s.charAt(j), j + 1); } return ans; } }
5. C++ 語言
#include#include #include #include
6. C 語言
#include#include #include static int lengthOfLongestSubstring(char *s) { int offset[128]; int max_len = 0; int len = 0; int index = 0; memset(offset, 0xff, sizeof(offset)); while (*s != '\0') { if (offset[*s] == -1) { len++; } else { if (index - offset[*s] > len) { len++; } else { len = index - offset[*s]; } } if (len > max_len) { max_len = len; } offset[*s++] = index++; } return max_len; } int main(int argc, char **argv) { if (argc != 2) { fprintf(stderr, "Usage: ./test string "); exit(-1); } printf("%d ", lengthOfLongestSubstring(argv[1])); return 0; }
以上是“編程語言中無重復字符最長子串的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道!