常考数据结构与算法:找到字符串的最长无重复字符子串
题目描述
给定一个数组arr,返回arr的最长无的重复子串的长度(无重复指的是所有数字都不相同)。
示例1
输入
[2,3,4,5]
返回值
4
示例2
输入
[2,2,3,4,3]
返回值
3
方法一:暴力算法
数组中的每个元素都循环一遍。比较每次循环的结果。效率极低。
public class MaxLengthMe {public static void main(String[] args) {int[] arr = {1,2,3,1,1,2};MaxLengthMe maxLengthMe = new MaxLengthMe();System.out.println(maxLengthMe.maxLength(arr));}/**** @param arr int整型一维数组 the array* @return int整型*/public int maxLength (int[] arr) {int max = 0;int[] arrTemp = new int[arr.length];int index = 0;for (int i = 0; i < arr.length; i++) {index = 0;for (int j = i; j <arr.length ; j++) {if(!isEqual(arrTemp, index, arr[j])){index++;}else{break;}}if(index > max){max = index;}}return max;}private boolean isEqual(int[] arrTemp,int index, int compare){for (int i = 0; i < index; i++) {if(arrTemp[i] == compare){return true;}}arrTemp[index] = compare;return false;}
}
方法二: 双指针
public class MaxLengthMe {public static void main(String[] args) {int[] arr = {1,2,1,3,4};MaxLengthMe maxLengthMe = new MaxLengthMe();System.out.println(maxLengthMe.maxLength(arr));}public int maxLength(int[] arr) {int maxLength = 0;int length = 0;int index = 0;int to = 0;int from = 0;//循环,每次增加一个元素,判断该字符在之前的数组中是否已经存在,//存在,则将from变为存在的元素索引+1,不存在,则to索引自增1,判断下一个元素while(to<arr.length){index = isEqual2(arr, from, to);if(-1 != index){// 有重复的length = to-from; // 无重复字符字串的长度// 1 2 3 4 5 4 6 7 8from = index+1; // 新的开始, 不用数组arr中每个元素if(maxLength < length){maxLength = length;}}else{to ++;}}// 处理最后一个子串if (to - from > maxLength) {maxLength = to - from;}return maxLength;}private int isEqual(int[] arr,int from, int to){for (int i = from; i < to; i++) {if(arr[i] == arr[to]){// 返回相等的位置return i;}}return -1;}}
常考数据结构与算法:找到字符串的最长无重复字符子串相关推荐
- 牛客题霸 [找到字符串的最长无重复字符子串] C++题解/答案
牛客题霸 [找到字符串的最长无重复字符子串] C++题解/答案 题目描述 给定一个数组arr,返回arr的最长无的重复子串的长度(无重复指的是所有数字都不相同). 题解: i和j两个指针分别指不重复子 ...
- 《程序员代码面试指南》第五章 字符串问题 找到字符串的最长无重复字符子串...
题目 找到字符串的最长无重复字符子串 java代码 努力中.... 转载于:https://www.cnblogs.com/lizhouwei/p/8955166.html
- 找到字符串的最长无重复字符子串
题目: 给定一个字符串str,返回str中最长无重复字符子串的长度. 举例: str = "abcd",返回4. str = "aabcb",返回3. 基本思 ...
- 【字符串】最长无重复字符子串练习题
**对于一个字符串,请设计一个高效算法,找到字符串的最长无重复字符的子串长度. 给定一个字符串A及它的长度n,请返回它的最长无重复字符子串长度.保证A中字符全部为小写英文字符,且长度小于等于500. ...
- 求字符串中最长无重复字符的子串
题目:求一个字符串中最长的没有重复字符的子串. 思路:用hash表从i遍历查看包含i的最长 无重复子串. int max_unique_substring2(char * str) {int i,j; ...
- 常考数据结构与算法:反转字符串
题目描述 写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串.(字符串长度不超过1000) 示例 输入 "abcd" 返回值 "dcba" publi ...
- 常考数据结构与算法:将字符串转为整数
题目描述 实现函数 atoi .函数的功能为将字符串转化为整数 提示:仔细思考所有可能的输入情况.这个问题没有给出输入的限制,你需要自己考虑所有可能的情况. 思路: 1. 需要判断正负数 2. 需 ...
- 常考数据结构与算法:输出二叉树的右视图
题目描述 请根据二叉树的前序遍历,中序遍历恢复二叉树,并打印出二叉树的右视图 上图树的右视图为:{1,4,3,7} 做此题之前可以先做下面3道题: 1. 常考数据结构与算法:求二叉树的层序遍历 2.常 ...
- 常考数据结构与算法:求二叉树的层序遍历
题目描述 给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历) 例如: 给定的二叉树是{3,9,20,#,#,15,7}, 该二叉树层序遍历的结果是 [ [3], [9,20], ...
最新文章
- python 删除字符串中重复的元素
- Javascript操作table,tr,td和表格CSS样式设置小常识
- CSP认证201412-2	Z字形扫描[C++题解]:模拟
- PHP中的dirname
- Hadoop权威指南 _02大体目录
- RGB和RGBQUAD的区别
- 面试字节跳动后的2点总结,建议收藏!
- 核心动画与UIView
- selector多路复用_多路复用器Selector
- matlab Cartesian,Matlab - Standard Deviation of Cartesian Points
- php编写程序计算积分_PHP论坛实现积分系统的思路代码详解
- C语言万年历设计制作
- PLM基础概述(解决方案架构师认证:PLM基础) | 达索系统百世慧
- 电脑结构和CPU、内存、硬盘三者之间的关系
- 【实战总结】根据地图经纬度及范围查询坐标点信息
- 第二篇supervisor集群管理工具cesi安装详解-如何安装supervisor-cesiwebUI
- Web入门学习笔记1——建立第一个网站
- 玩转系统|如何Windows Update自动更新
- nth-child的使用方法
- Java从接触到放弃(二十一)--网络编程