编程语言中无重复字符最长子串的示例分析
发表于:2024-10-27 作者:千家信息网编辑
千家信息网最后更新 2024年10月27日,小编给大家分享一下编程语言中无重复字符最长子串的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、说明给定一个字符
千家信息网最后更新 2024年10月27日编程语言中无重复字符最长子串的示例分析
小编给大家分享一下编程语言中无重复字符最长子串的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
一、说明
给定一个字符串,找出不含有重复字符的 最长子串 的长度。
示例:
给定 `"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 已经在 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;}
以上是"编程语言中无重复字符最长子串的示例分析"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
语言
最长
字符
长度
示例
方式
篇文章
j++
编程语言
分析
编程
内容
就是
参考
不怎么
大部分
字符串
序列
方案
更多
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
服务器机房建设公司
上海交通大学网络技术学院
数据库如何精准确定时间范围
我的世界韩国服务器
做网站送的服务器很差
山东国核网络技术信息
开展网络安全风险巡检
如何建域服务器
百度外卖数据库营销建议
函数与数据库关系
软件开发涉密乙级
网络安全类证书考试时间
用dns 服务器需要几台电脑
辽宁什么是网络技术服务推广
麻将软件开发公司
网络安全宣传周 答题
浙江工业软件开发流程
服务器维修公司 广州
数据库操作命令edit
福州中睿网络技术有限公司电话
河北ios软件开发需求
数据库查询姓氏个数
中兴网络技术支持工程师跳槽
福州纳百川互联网科技
服务器必须装两个cpu吗
嵌入式软件开发 面经
腾讯服务器不升级怎么回事
如何删除安卓软件的服务器
税收网络安全知识
福州中睿网络技术有限公司电话