Longest Substring Without Repeating Characters
来源:互联网 发布:c语言教案及配套课件 编辑:程序博客网 时间:2024/05/19 15:40
Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for "abcabcbb" is "abc", which the length is 3. For "bbbbb" the longest substring is "b", with the length of 1.
错误思路:最开始想到的是用类似求最大子序列和的方法求,但是有错误。因为每次遇到重复的字符时,直接从当前重复字符+1的位置继续计算最长子序列长。
public class Solution{ public static int lengthOfLongestSubstring(String s) { int maxlength = 0,tmplength = 0; int length = s.length(); String string = ""; for(int i = 0; i < length; i++) { char c = s.charAt(i); if(string.indexOf(c) < 0) { tmplength++; string += c; } else { tmplength = 1; string = String.valueOf(c); } if(maxlength < tmplength) maxlength = tmplength; } return maxlength;} public static void main(String[] args){// TODO Auto-generated method stubString string= "bbbbbb";System.out.println(lengthOfLongestSubstring(string));}}
思路二:分析上述错误原因:每次遇到重复字符,不应该从当前重复字符位置开始,而是从重复的原字符开始下一轮的计算。但在数据量很大的时候,会超时
public static int lengthOfLongestSubstring_1(String s) { int maxlength = 0,tmplength = 0; int length = s.length(); String string = "",maxstring = ""; for(int i = 0; i < length; i++) { char c = s.charAt(i); int index = string.indexOf(c); if(index < 0) { tmplength++; string += c; System.out.println(string); } else { int bw = string.length() - index -1; i = i - bw - 1; tmplength = 0; string = ""; } if(maxlength < tmplength) { maxlength = tmplength; maxstring = string; } } return maxlength;
思路三:Hash
public static int lengthOfLongestSubstring(String s) { int start = 0; int length = s.length(); int maxlength = 0; int[] map = new int[256]; for(int i = 0; i < length; i++) { char c = s.charAt(i); if(map[c] != 1) { map[c] = 1; maxlength = Math.max(maxlength, i - start + 1); } else { while(s.charAt(start) != c) { map[s.charAt(start)] = 0; start++; } start++; } } return maxlength; }
思路四:DP
public static int lengthOfLongestSubstring(String s) { int length = s.length(),maxlength = 0; if(length == 0) return length; int[] dp = new int[length]; dp[0] = 1; int last_index = 0; for(int i = 1; i < length; i++) for(int j = last_index; j < i; j++) { if(s.charAt(j) == s.charAt(i)) { dp[i] = i - j; last_index = j + 1; break; } else dp[i] = dp[i - 1] + 1; } for(int i = 0; i < length; i++) maxlength = Math.max(dp[i], maxlength); return maxlength; }
0 0
- Longest Substring Without Repeating Characters
- Longest Substring Without Repeating Characters
- Longest Substring Without Repeating Characters
- Longest Substring Without Repeating Characters
- Longest Substring Without Repeating Characters
- Longest Substring Without Repeating Characters
- Longest Substring Without Repeating Characters
- Longest Substring Without Repeating Characters
- Longest Substring Without Repeating Characters
- Longest Substring Without Repeating Characters
- Longest Substring Without Repeating Characters
- Longest Substring Without Repeating Characters
- Longest Substring Without Repeating Characters
- Longest Substring Without Repeating Characters
- Longest Substring Without Repeating Characters
- Longest Substring Without Repeating Characters
- Longest Substring Without Repeating Characters
- Longest Substring Without Repeating Characters
- 业务流程管理,你准备好了吗?
- 黑马程序员_Java基础——网络编程(第7篇)
- 003
- VC++常用数据类型
- linux下shell任务控制命令与快捷键jobs/fg/bg/ctrl+z/kill
- Longest Substring Without Repeating Characters
- Cocos2d-x Lua 开发环境
- sun.misc.Unsafe源码
- vs2012 快捷键
- 集群(cluster)原理
- Android开发工具类大集合(二)
- 哪些 IT 职位难以替代,竞争力强?
- 阿里云服务器Centos安装rpm版MySql
- 2014华为机试题12:求最大递增数