题目:输入一个字符串,求该字符串中不含重复字符的最长子 字符串的长度。例如,输入字符串"babcca",其最长的不含重复字符的子字符串是"abc",长度为3。

// 用两个指针来指向子字符串的最左边和最右边
// 通过移动两个指针来找到不包含重复字符的字符串
// 当字符串不重复时将右边的指针往右移动增加子字符串的长度
// 当子字符串中字符重复时将左边的指针往右移动直到两个指针
// 之间的子字符串中无重复字符为止counts长度为128的一个哈希表
// 因为ASCII码最多表示128个数,将字符的ASCII码作为counts数组的索引
// 值作为字符出现的次数
public int lengthOfLongestSubstring(String s) {if (s.length() == 0) {return 0;}int[] counts = new int[128];int i = 0;int j = -1;int longest = 1;for (; i < s.length(); i++) {counts[s.charAt(i)]++;// 当子字符串中字符重复时左指针右移while (hasGreaterThan1(counts)) {j++;// 左指针右移后因为子字符串长度减少所以对应// 的减少的字符在counts数组中的数量也减一counts[s.charAt(j)]--;}longest = Math.max(i - j, longest);}return longest;
}// 方法一:如果counts数组中有数的值大于1则代表有子字符串有重复字符
private boolean hasGreaterThan1(int[] counts) {for (int count : counts) {if (count > 1) {return true;}}return false;
}// 方法二:直接通过一个变量countDup来判断子字符串是否含有重复字符
// 这种方式可以避免每次都遍历counts数组而造成的大量的冗余的循环判断
public int lengthOfLongestSubstring2(String s) {if (s.length() == 0) {return 0;}int[] counts = new int[128];int i = 0;int j = -1;int longest = 1;int countDup = 0;for (; i < s.length(); i++) {counts[s.charAt(i)]++;// 当counts[s.charAt(i)] == 2则代表一个字符在子字符串中出现了两次// 因此将countDup的值加一if (counts[s.charAt(i)] == 2) {countDup++;}// 当countDup == 1 则说明子字符串中有重复的字符// 因此左指针反复右移直到子字符串中无重复字符while (countDup == 1) {j++;counts[s.charAt(j)]--;if (counts[s.charAt(i)] == 1) {countDup--;}}longest = Math.max(i - j, longest);}return longest;
}

面试题16:不含重复字符的最长子字符串(Java版)相关推荐

  1. 【LeetCode】不含重复字符的最长子字符串

    题目描述 给定一个字符串 s ,请你找出其中不含有重复字符的 最长连续子字符串 的长度. 示例 示例 1: 输入: s = "abcabcbb" 输出: 3 解释: 因为无重复字符 ...

  2. 1041-不含重复字符的最长子字符串

    题目如下 示例 1: 输入: s = "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子字符串是 "abc",所以其长度为 3. 示例 2: 输入 ...

  3. c++ 查找 list中最长的字符串_查找不重复字符的最长子字符串(编程面试中常见题-用8种编程语言来回答)...

    查找不重复字符的最长子字符串(编程面试中常见题-用8种编程语言来回答) 给定一个字符串str,找到不重复字符的最长子字符串. 比如我们有 "ABDEFGABEF", 最长的字符串是 ...

  4. [转载] 字符串最长重复子串python_查找字符串中重复字符的最长子字符串

    参考链接: Python字符串| digits 我尽量不在codeforces问题上寻求帮助,除非我真的,真的,卡住了,现在正好是.在Your first mission is to find the ...

  5. 面试题48:最长不含重复字符的子字符串

    目录 1.动态规划 2.滑动数组 1.动态规划 先来分析一下吧...这题我们很容易想到,假设f(i)表示以下标i结尾的s[i]中的最长不含重复字符的子字符串,那么f(i)=f(i-1)+1是不是很容易 ...

  6. 【剑指offer】最长不含重复字符的子字符串

    题目: * 面试题48:请从字符串中找出一个最长的不包含重复字符的子字符串, * 计算该最长子字符串的长度.假设字符串中只包含从'a'到'z'的字符. * 例如,在字符串中'arabcacfr',最长 ...

  7. 字符串左侧补0_(48)C++面试之最长不含重复字符的子字符串(动态规划)

    // 面试题48:最长不含重复字符的子字符串 // 题目:请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子 // 字符串的长度.假设字符串中只包含从'a'到'z'的字符. #inclu ...

  8. 【LeetCode】剑指 Offer 48. 最长不含重复字符的子字符串

    [LeetCode]剑指 Offer 48. 最长不含重复字符的子字符串 文章目录 [LeetCode]剑指 Offer 48. 最长不含重复字符的子字符串 package offer;import ...

  9. 剑指offer48-最长不含重复字符的子字符串(双指针经典)

    问题描述 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 ...

最新文章

  1. 这些代码改变了科学界:从Fortran、arXiv到AlexNet
  2. 独家 | ​采用BERT的无监督NER(附代码)
  3. 服务监控-URL接口监控
  4. TreeView和DataGridView控件组合使用
  5. ERP系统开发平台 (C#语言,支持多数据库)
  6. jmeter进行性能测试_使用JMeter进行性能测试
  7. dos虚拟机如何全屏显示_实用工具 | 虚拟机软件VirtualBox详细使用介绍
  8. 织梦cms生成首页html的php文件,织梦DedeCMS定时自动生成首页HTML的实现方法
  9. C 语言结构体引用,引用 C 语言结构体学习
  10. 洛谷1004方格取数
  11. Visual Studio 2010全球发布会 上海站(图)
  12. In file included from /usr/include/stdio.h:27:0, from btest.c:16: /usr/include/feat出错的解决办法
  13. 一个***的自白(续)
  14. matlab指数分布拟合,如何使用matlab拟合指数分布函数?
  15. CuteFTP,8uftp cuteftp
  16. 学习日记day36 平面设计 字体设计
  17. HTML文本框边框宽度,如何设置文本框尺寸 word文本框怎么设置统一大小
  18. 使用Lua GD库动态生成验证码图片(2)
  19. c mysql加密解密_mysql内置加密函数对数据加密
  20. Win10调整各窗口的任务栏位置

热门文章

  1. chrome浏览器怎么设置编码
  2. java面试基础题整理(二)
  3. 切换页面导致计时器停止,JS暂停!
  4. 笔记本电脑应用商店服务器错误,Windows10系统无法打开这个应用商店解决方法
  5. Laragon实现快速创建ThinkPHP项目
  6. 中国人民大学与加拿大女王大学金融硕士——在这里,打开精彩“识界”
  7. 2021年「博客之星」参赛博主:南浔Pyer
  8. 解决jenkins发版报错:JAR will be empty - no content was marked for inclusion
  9. 希尔排序及手推时间复杂度(java实现)
  10. Python3 ——斐波那契数列(经典)