这道题是LeetCode里的第3道题。

题目描述:

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

示例 1:

  1. 输入: "abcabcbb"
  2. 输出: 3
  3. 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3

示例 2:

  1. 输入: "bbbbb"
  2. 输出: 1
  3. 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1

示例 3:

  1. 输入: "pwwkew"
  2. 输出: 3
  3. 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3
  4. 请注意,你的答案必须是 子串 的长度,"pwke"是一个子序列,不是子串。

这题可以使用双指针解题,但是不推荐,最好理解的方法就是我这种建立哈希表。但是呢,哈希表可以和双指针一起使用,节约一半的时间。哈希表的用途在于记录该字符是否出现过。

解题代码:

  1. class Solution {
  2. public int lengthOfLongestSubstring(String s) {
  3. if(s.equals(""))return 0;
  4. int maxLength = 0,len = 0;
  5. int[] hashMap = new int[128];
  6. int i=0,j=1;
  7. hashMap[s.charAt(i)] = 1;
  8. len++;
  9. while(i < s.length() && j < s.length()) {
  10. while(j < s.length()) {
  11. if(hashMap[s.charAt(j)] == 1) {
  12. hashMap[s.charAt(i)] = 0;
  13. i++;
  14. len = j - i + 1;
  15. if(len > maxLength)maxLength = len;
  16. hashMap[s.charAt(i)] = 1;
  17. if(j<=i)j = i+1;
  18. break;
  19. }
  20. hashMap[s.charAt(j)] = 1;
  21. //len++;
  22. j++;
  23. }
  24. }
  25. len = j - i;
  26. if(len > maxLength)maxLength = len;
  27. return maxLength;
  28. }
  29. }

提交结果:

个人总结:

双指针:

  1. class Solution {
  2. public int lengthOfLongestSubstring(String s) {
  3. if(s == null || s.length() == 0) return 0;
  4. int start = 0, max = 1;
  5. char[] str = s.toCharArray();
  6. for(int j = 1; j < s.length(); j++) {
  7. for(int i = start; i < j; i++){
  8. if(str[i] == str[j]) {
  9. start = i + 1;
  10. break;
  11. }
  12. }
  13. max = Math.max(j - start + 1, max);
  14. }
  15. return max;
  16. }
  17. }

双指针的基本思想就是确定开始遍历的字符位置。

【LeetCode】Longest Substring Without Repeating Characters(无重复字符的最长子串)的更多相关文章

  1. 【LeetCode】3. Longest Substring Without Repeating Characters 无重复字符的最长子串

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 公众号:负雪明烛 本文关键词:无重复字符,最长子串,题解,leetcode, 力扣,py ...

  2. leetcode 3. Longest Substring Without Repeating Characters 无重复字符的最长子串

    一.题目大意 https://leetcode.cn/problems/longest-substring-without-repeating-characters/ 给定一个字符串 s ,请你找出其 ...

  3. 3. Longest Substring Without Repeating Characters 无重复字符的最长子串

    1. 原始题目 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 &quo ...

  4. [LeetCode]3. Longest Substring Without Repeating Characters无重复字符的最长子串

    Given a string, find the length of the longest substring without repeating characters. Example 1: In ...

  5. 3. Longest Substring Without Repeating Characters无重复字符的最长子串

    网址:https://leetcode.com/problems/longest-substring-without-repeating-characters/ 显然采用sliding window滑 ...

  6. Leetcode3.Longest Substring Without Repeating Characters无重复字符的最长字串

    给定一个字符串,找出不含有重复字符的最长子串的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 无重复字符的最长子串是 "abc",其长度为 ...

  7. [leetcode]3. Longest Substring Without Repeating Characters无重复字母的最长子串

    Given a string, find the length of the longest substring without repeating characters. Examples: Giv ...

  8. leetcode刷题第三天<无重复字符的最长子串>

    给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 : 输入: "abcabcbb" 输出: 解释: 因为无重复字符的最长子串是 . 示例 : 输入: &quo ...

  9. leetcode 刷题(3)--- 无重复字符的最长子串

    给定一个字符串,找出不含有重复字符的最长子串的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 无重复字符的最长子串是 "abc",其长度为 ...

随机推荐

  1. pc-要实现相隔一定时间数据排序变化一次

    有时候产品会有这种要求,就是展示的数据三天是正序的,一天是逆序的,解决是: 以某一个时间点为基准点,然后获取当前的时间,然后计算差值,分情况 //专利 JPView : function(Sorder ...

  2. java Vamei快速教程20 GUI

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! GUI(Graphical User Interface)提供了图形化的界面,允许 ...

  3. appuim操作webview控件

    1.操作webview控件,在uiautomator中如下图,能定位的只有最外层的内容.就一个webview控件,查找不到里面内容 1.使用driver.getContext(),获取是否是webvi ...

  4. AngularJs学习笔记-服务

    服务 (1)在模块中声明的服务对所有组件可见 (2)在组件中声明的服务对自己本身和其子组件 (3)在组件中声明的服务会覆盖在模块中声明的服务 (4)通过@Injectable()装饰器可以在服务中注入 ...

  5. Scanner和 Random类,控制语句的例题,商品管理(直接赋值)

    Scanner类的使用: import java.util.Scanner; class Demo02 { public static void main(String[] args) { //1.导 ...

  6. AngularJS 字符串

    AngularJS字符串就像是JavaScript字符串 <!DOCTYPE html><html><head><meta http-equiv=" ...

  7. vue 服务代理 调用第三方api

    项目中前期需要调用第三方API来获取汇率.因为直接调用会有跨域的问题,所以使用来服务代理. 在config配置代理可以这样写: 而调用接口就可以这样写: 坑:配置完成后一直报500,开始怀疑人生.最后 ...

  8. ios swift 里面关于变量 常量 可选类型 控制流的一些心得

    //swift 里面没有头文件和实现文件.只有一个.swift文件 //swift 里面没有main的概念,程序从main.swift开始执行 //swift 每一条执行语句可以不用分号结束,多条语句 ...

  9. STL笔记(こ)--删除数组中重复元素

    使用STL中的Unique函数: #include<bits/stdc++.h> using namespace std; void fun(int &n) //配套for_eac ...

  10. 洛谷P1049装箱问题

    一句话刚刚的题会了,这题能不会么. #include<bits/stdc++.h> using namespace std; int main(){ int n,m; cin>> ...