Leetcode Longest Substring Without Repeating …
2018-06-18 03:02:41来源:未知 阅读 ()
解法一:
class Solution { public int lengthOfLongestSubstring(String s) { int max = 0; if (s.length() <= 1) { max = s.length(); return max; } for (int i = 0; i < s.length(); i++) { //新建一个StringBuilder存储临时字符串 StringBuilder str = new StringBuilder(); str.append(String.valueOf(s.charAt(i))); //判断每个字符串多长 for (int j = i + 1; j < s.length(); j++) { //当出现相同字符串则停止匹配跳出 if (str.indexOf(String.valueOf(s.charAt(j))) == -1) { str.append(String.valueOf(s.charAt(j))); } else{ break; } } //记录最大长度 if (str.length() > max) { max = str.length(); } } return max; } }
这种解法使用的是Brute Force算法,即是暴力搜索匹配,时间复杂度较高
解法二:
class Solution { public int lengthOfLongestSubstring(String s) { int max = 0; //存储每个字符出现的位置 Hashtable<Character, Integer> map = new Hashtable<Character, Integer>(); //遍历字符串 for (int i = 0, j = 0; i < s.length(); i++) { //当出现相同字符时改变窗口左边框位置并记录窗口长度 if (map.containsKey(s.charAt(i))) { j = Math.max(map.get(s.charAt(i)) + 1 , j); } max = Math.max(max, i - j + 1); map.put(s.charAt(i), i); } return max; } }
这种解法的思想是计算两个相同的字符之间的长度,好比作一个窗口在字符串上右边框向右拉伸,若右边框碰到窗口内已存在的字符,那么左边框向右拉伸到到窗口已存在字符的右边,时间复杂度较低
github地址:https://github.com/CyanChan/leetcode
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:Java 接口理论篇
- LeetCode 287. 寻找重复数 2020-05-31
- LeetCode 5. 最长回文子串 2020-05-22
- LeetCode 21. 合并两个有序链表 2020-05-22
- LeetCode 面试题55 - I. 二叉树的深度 2020-05-22
- LeetCode 104. 二叉树的最大深度 2020-05-22
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash