无重复字符串的最长子串
注意:题目说的是最长子串,而不是最长子序列。
解法一
通过滑动窗口方式解决问题,每一次移动窗口前,记录窗口的长度。并且与前一个窗口比较大小,取最大的记为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");
无重复字符串的最长子串相关推荐
- 【LeetCode】3.无重复字符串的最长子串
3.无重复字符串的最长子串 一.问题描述 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 二.问题简化 这个问题本质上是: "从一个数组中,寻找最长的子串,其元素均不相同& ...
- 无重复字符串的最长子串 python
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc&qu ...
- python输入多个字符串、输入最长的一串_无重复字符的最长子串(Python之暴力求解)...
无重复字符的最长子串(Python之暴力求解) 例题: 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例: (1) 输入: "abcabcbb" 输出: 3 ...
- python字符串中最长的连续升序子串_Leetcode刷题练Python无重复字符的最长子串
这是一道字符串处理算法的题目,在日常编程中,处理字符串是常见任务.该题目会涉及到一个概念"滑动窗口". 一.题目描述 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度 ...
- [贪心|字符串] leetcode 3 无重复字符的最长子串
[贪心|字符串] leetcode 3 无重复字符的最长子串 1.题目 题目链接 给定一个字符串,请你找出其中不含有重复字符的最长子串的长度. 示例1: 输入: "abcabcbb" ...
- python重复字符串n次的函数_LeetCode_Python(3)_无重复字符的最长子串
需求 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc ...
- 【leetcode】力扣刷题(3):无重复字符的最长子串(go语言)
一.问题描述 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 " ...
- 刻意练习:LeetCode实战 -- Task16. 无重复字符的最长子串
背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务.本期训练营采用分类别练习的模式,即选择了五个知识点(数组.链表.字符串.树.贪心算法),每个知 ...
- 【每日一算法】无重复字符的最长子串
微信改版,加星标不迷路! 每日一算法 - 无重复字符的最长子串 思路答案 首先定义一个指针p指向该字符串的链头,然后通过p指针后的第i个字符是否和p指针后的第j个字符相同来取得最大长度.(也叫做完全遍 ...
最新文章
- 大型分布式存储方案MinIO介绍,看完你就懂了!
- Android Service、IntentService,Service和组件间通信
- 【LeetCode笔记】114. 二叉树展开为链表(Java、递归)
- 寻找 K8s 1.14 Release 里的“蚌中之珠”
- c比java运行快的原因_C/C++比JAVA快的原因
- catalyst 6500 安装配置
- Android Location API跟踪您当前的位置
- python判断字符类型例题_Python面试题:字符类型的考察
- ThinkPHP5框架下载安装
- Oracle学习技巧
- python单位根检验看结果_求助!!!关于单位根检验!!!!我检验了,但看不懂结果,哪位高手帮帮忙...
- Java 设计模式最佳实践:四、结构模式
- 单个html页面面包屑,充分利用网页设计中的面包屑
- 【数据分析】基础技术篇 三——matplotlib
- GTS、GCK,GSR全称
- 计算机英语反思总结怎么写,英语考试反思总结
- 基于Redission实现分布式锁
- echo -e 命令详解
- 企业管理培训讲座在线观看目录
- 汉字转换拼音字头原理实践
热门文章
- IDEA无法导入HttpServlet包解决方法
- [TODO]com.alibaba.dubbo.rpc.RpcException: Failed to invoke the method
- day3—python——字符串常用方法
- 模板方法设计模式(未完待续)
- Android 关于后台杀死App之后改变服务器状态的一些尝试
- 洛谷 P2097 资料分发1
- FluentNhibernate 组件component及应用
- 史蒂夫 乔布斯(Steve Jobs)在斯坦福大学2005年毕业典礼上的演讲
- 买无线路由还是买无线AP?
- 大二下学期学习进度(四)