注意:题目说的是最长子串,而不是最长子序列

解法一

通过滑动窗口方式解决问题,每一次移动窗口前,记录窗口的长度。并且与前一个窗口比较大小,取最大的记为max。

public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);String str = sc.nextLine();System.out.println(lengthOfLongestSubstring(str));}public static int lengthOfLongestSubstring(String s) {if(s.length() == 0){ //空字符串则直接返回0return 0;}HashSet set = new HashSet<Character>();int left, right = 0; //窗口左右指针int max = 0;//外循环控制左指针移动for(left = 0; left < s.length(); left++){//内循环控制右指针移动while(right < s.length() && !set.contains(s.charAt(right))){set.add(s.charAt(right)); //集合中没有该元素则添加right++;}max = Math.max(max, right - left);set.remove(s.charAt(left)); //移除set集合中做指针指向的元素}return max;}}

解法二

public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);String str = sc.nextLine();System.out.println(lengthOfLongestSubstring(str));}public static int lengthOfLongestSubstring(String s) {if (s.length() == 0) {return 0;}HashMap<Character, Integer> map = new HashMap<>();int left = 0, max = 0;for (int right = 0; right < s.length(); right++) {if (map.containsKey(s.charAt(right))) {left = Math.max(left, map.get(s.charAt(right)) + 1);}map.put(s.charAt(right), right);max = Math.max(max, right - left + 1);}return max;}}

计算某一段程序消耗的内存和时间

Runtime r = Runtime.getRuntime();
r.gc();//计算内存前先垃圾回收一次long start = System.currentTimeMillis();//开始Time
long startMem = r.freeMemory(); // 开始MemorylengthOfLongestSubstring(str); //被测的程序!!!!!long endMem = r.freeMemory(); // 末尾Memory
long end = System.currentTimeMillis();//末尾TimeSystem.out.println("TimeCost: " + String.valueOf(end - start) + "ms");
System.out.println("MemoryCost: " + String.valueOf((startMem- endMem)/1024) + "MB");

无重复字符串的最长子串相关推荐

  1. 【LeetCode】3.无重复字符串的最长子串

    3.无重复字符串的最长子串 一.问题描述 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 二.问题简化 这个问题本质上是: "从一个数组中,寻找最长的子串,其元素均不相同& ...

  2. 无重复字符串的最长子串 python

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

  3. python输入多个字符串、输入最长的一串_无重复字符的最长子串(Python之暴力求解)...

    无重复字符的最长子串(Python之暴力求解) 例题: 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例: (1) 输入: "abcabcbb" 输出: 3 ...

  4. python字符串中最长的连续升序子串_Leetcode刷题练Python无重复字符的最长子串

    这是一道字符串处理算法的题目,在日常编程中,处理字符串是常见任务.该题目会涉及到一个概念"滑动窗口". 一.题目描述 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度 ...

  5. [贪心|字符串] leetcode 3 无重复字符的最长子串

    [贪心|字符串] leetcode 3 无重复字符的最长子串 1.题目 题目链接 给定一个字符串,请你找出其中不含有重复字符的最长子串的长度. 示例1: 输入: "abcabcbb" ...

  6. python重复字符串n次的函数_LeetCode_Python(3)_无重复字符的最长子串

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

  7. 【leetcode】力扣刷题(3):无重复字符的最长子串(go语言)

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

  8. 刻意练习:LeetCode实战 -- Task16. 无重复字符的最长子串

    背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务.本期训练营采用分类别练习的模式,即选择了五个知识点(数组.链表.字符串.树.贪心算法),每个知 ...

  9. 【每日一算法】无重复字符的最长子串

    微信改版,加星标不迷路! 每日一算法 - 无重复字符的最长子串 思路答案 首先定义一个指针p指向该字符串的链头,然后通过p指针后的第i个字符是否和p指针后的第j个字符相同来取得最大长度.(也叫做完全遍 ...

最新文章

  1. 大型分布式存储方案MinIO介绍,看完你就懂了!
  2. Android Service、IntentService,Service和组件间通信
  3. 【LeetCode笔记】114. 二叉树展开为链表(Java、递归)
  4. 寻找 K8s 1.14 Release 里的“蚌中之珠”
  5. c比java运行快的原因_C/C++比JAVA快的原因
  6. catalyst 6500 安装配置
  7. Android Location API跟踪您当前的位置
  8. python判断字符类型例题_Python面试题:字符类型的考察
  9. ThinkPHP5框架下载安装
  10. Oracle学习技巧
  11. python单位根检验看结果_求助!!!关于单位根检验!!!!我检验了,但看不懂结果,哪位高手帮帮忙...
  12. Java 设计模式最佳实践:四、结构模式
  13. 单个html页面面包屑,充分利用网页设计中的面包屑
  14. 【数据分析】基础技术篇 三——matplotlib
  15. GTS、GCK,GSR全称
  16. 计算机英语反思总结怎么写,英语考试反思总结
  17. 基于Redission实现分布式锁
  18. echo -e 命令详解
  19. 企业管理培训讲座在线观看目录
  20. 汉字转换拼音字头原理实践

热门文章

  1. IDEA无法导入HttpServlet包解决方法
  2. [TODO]com.alibaba.dubbo.rpc.RpcException: Failed to invoke the method
  3. day3—python——字符串常用方法
  4. 模板方法设计模式(未完待续)
  5. Android 关于后台杀死App之后改变服务器状态的一些尝试
  6. 洛谷 P2097 资料分发1
  7. FluentNhibernate 组件component及应用
  8. 史蒂夫 乔布斯(Steve Jobs)在斯坦福大学2005年毕业典礼上的演讲
  9. 买无线路由还是买无线AP?
  10. 大二下学期学习进度(四)