No.003 Longest Substring Without Repeating Characters
时间:2022-04-29
本文章向大家介绍No.003 Longest Substring Without Repeating Characters,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Longest Substring Without Repeating Characters
- Total Accepted: 167158
- Total Submissions: 735821
- Difficulty: Medium
Given a string, find the length of the longest substring without repeating characters.
Examples:
Given "abcabcbb"
, the answer is "abc"
, which the length is 3.
Given "bbbbb"
, the answer is "b"
, with the length of 1.
Given "pwwkew"
, the answer is "wke"
, with the length of 3. Note that the answer must be a substring, "pwke"
is a subsequence and not a substring.
解题思路参考自: http://www.geeksforgeeks.org/length-of-the-longest-substring-without-repeating-characters/
1 public class Num3 {
2 /*
3 * 方法一:暴力搜索,复杂度 O(n^3)
4 */
5 public int lengthOfLongestSubstring(String s) {
6 if(s == null || s.length() == 0){
7 return 0 ;
8 }
9 String sub ;
10 for(int subLen = s.length() ; subLen > 0 ; subLen--){
11 for(int startIndex = 0 ; startIndex <= (s.length()-subLen) ; startIndex++){
12 //列出所有子串,然后判断子串是否满足有重复
13 if(startIndex != (s.length()-subLen)){
14 sub = s.substring(startIndex, startIndex+subLen) ;
15 }else{
16 sub = s.substring(startIndex) ;
17 }
18 if(!isRepeat(sub)){
19 return subLen ;
20 }
21 }
22 }
23
24 return 1 ;
25 }
26
27 private boolean isRepeat(String s){
28 for(int i = 1 ; i < s.length(); i++){
29 if(s.substring(i).contains(s.substring(i-1, i))){
30 return true ;
31 }
32 }
33 return false ;
34 }
35
36 /*
37 * 方法二:用hash的方法加上动态规划求解
38 */
39 public int lengthOfLongestSubstring2(String s) {
40 if(s == null || s.length() == 0){
41 return 0 ;
42 }
43 int cur_len = 1 ; //lenght of current substring
44 int max_len = 1 ;
45 int prev_index ; // previous index
46 int [] visited = new int [256] ;
47 char [] arr = s.toCharArray() ;
48 /* Initialize the visited array as -1, -1 is used to
49 indicate that character has not been visited yet. */
50 for(int i = 0 ; i < 256 ; i++){
51 visited[i] = -1 ;
52 }
53 /* Mark first character as visited by storing the index
54 of first character in visited array. */
55 visited[arr[0]] = 0 ;
56
57 /* Start from the second character. First character is
58 already processed (cur_len and max_len are initialized
59 as 1, and visited[arr[0]] is set */
60 for(int i = 1 ; i < arr.length ; i++){
61 prev_index = visited[arr[i]] ;
62
63 /* If the current character is not present in the
64 already processed substring or it is not part of
65 the current NRCS, then do cur_len++ */
66 if(prev_index == -1 || i - cur_len > prev_index){
67 cur_len++ ;
68 }else{
69 /* Also, when we are changing the NRCS, we
70 should also check whether length of the
71 previous NRCS was greater than max_len or
72 not.*/
73 if(cur_len > max_len){
74 max_len = cur_len ;
75 }
76 // update the index of current character
77 cur_len = i - prev_index ;
78 }
79
80 visited[arr[i]] = i ;
81 }
82
83 // Compare the length of last NRCS with max_len and
84 // update max_len if needed
85 if (cur_len > max_len){
86 max_len = cur_len ;
87 }
88
89 return max_len ;
90
91 }
92
93 }
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 持续集成gitlab-ci.yml配置文档基础
- php基础教程 第二步 通俗易懂的学习变量、常量与数据类型
- git | Windows下如何利用Linux的命令
- python3 爬虫第三步 本文包你学会正则 不会就来锤我
- php基础教程 第三步 学习字符串及相关函数
- php基础教程 第四步 学习运算符
- php基础教程 第五步 逻辑控制
- php基础教程 第六步 学习数组以及条件判断switch补充
- php基础教程 第七步数组补充及循环基础
- php基础教程 第八步循环补充
- php基础教程 第九步 自定义函数
- php基础教程 第十步 阶段性知识补充
- php基础教程 第十一步 面向对象
- php基础教程 第十一步 面向对象补充
- Serverless|Framework——图文玩转 AWS Lambda