首页 > 编程语言 >java:输入一个字符串,在其中寻找长度最长的,不含重复字符的字符串,如果有多个长度相同的最长子字符串,则全部输出子字符串

java:输入一个字符串,在其中寻找长度最长的,不含重复字符的字符串,如果有多个长度相同的最长子字符串,则全部输出子字符串

时间:2023-05-01 15:35:45浏览次数:40  
标签:字符 end java 复杂度 start result 字符串 长度

public class test2 {

public static List<String> findLongestSubstring(String s) {
List<String> result = new ArrayList<>();
int n = s.length();
Map<Character, Integer> map = new HashMap<>();
int start = 0, end = 0, len = 0;
while (end < n) {
char c = s.charAt(end);
if (map.containsKey(c)) {
start = Math.max(start, map.get(c) + 1);
}
map.put(c, end);
if (end - start + 1 > len) {
len = end - start + 1;
result.clear();
result.add(s.substring(start, end + 1));
} else if (end - start + 1 == len) {
result.add(s.substring(start, end + 1));
}
end++;
}
return result;
}

public static void main(String[] args) {
String s = "abcabcbb";
List<String> result = findLongestSubstring(s);
System.out.println(result);
}

}

该代码的核心思想是
使用哈希表存储每个字符最近一次出现的位置。遍历字符串时,如果遇到重复字符,更新起始位置为上一个该字符的位置加一。
同时,记录下最长的子字符串长度和所有长度相同的子字符串。最后返回所有长度相同的子字符串。

上面的代码中,

主要的时间复杂度来自于遍历字符串和哈希表的操作。遍历字符串的时间复杂度为O(n),其中n是字符串的长度。每个字符在哈希表中的查找和更新都需要O(1)的时间。因此,总的时间复杂度为O(n)。

空间复杂度方面,哈希表最多存储不同字符的数量,因此空间复杂度为O(k),其中$k$是不同字符的数量。在本题中,由于只考虑ASCII码字符,因此$k$的最大值为$128$。因此,空间复杂度为O(1)。

综上所述,该算法的时间复杂度为O(n),空间复杂度为O(1)。这是一个非常高效的算法,可以在很短的时间内找到最长的不含重复字符的子字符串。



标签:字符,end,java,复杂度,start,result,字符串,长度
From: https://www.cnblogs.com/me-me/p/17366556.html

相关文章

  • JavaSE大纲
    jdk8&9新特性Lambda表达式多线程IO流异常CollectionsListMapSet泛型可变参数Collection集合的使用StringBuffer&StringBuilder基本数据类型和字符串的相互转换装箱拆箱日期Arrays工具类&Object类静态内部类&字符串多态,构造方法接口继承封装抽象面向对象......
  • Java线程池中的四种拒绝策略
    CallerRunsPolicy:这是默认的拒绝策略,当线程池队列已满并且无法处理新任务时,将由提交任务的线程来执行该任务。这种策略可以降低新任务的流量,但也会增加提交任务的线程的负载。AbortPolicy:当线程池队列已满并且无法处理新任务时,将抛出RejectedExecutionException异常,阻止新任......
  • JAVA的Jdbc连接Access数据库
      Eclipse加入Access_JDBC30.jar:   程序如下:importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;importjava.sql.Statement;publicclassconn{publicstaticStringconnct(){try{......
  • Java内部类与匿名类
    内部类定义:一个类的内部又完整的嵌套了另一个类结构,被嵌套的类就被我们称为内部类,嵌套内部类的类被我们称为外部类//外部类classOuter{ //内部类 classInner { }}packageInnerclass;//外部其他类publicclassc1{}classOuter{//属性private......
  • java 基础(5)在idea中对java程序打包运行
    第一步 第二步 第三步  src目录下 第四步   第五步:  ......
  • Java层序遍历打印二叉树(有Null值)
    publicclassSolution{publicstaticvoidmain(String[]args){Integer[]arr={3,9,20,null,null,15};//根据数组构造出二叉树TreeNodetreeNode=creatTreeNode(arr,0);//层序有Null值的打印二叉树printBin......
  • JavaScript相关
    Javascript基础​ JavaScript,是一门能够运行在浏览器上的脚本语言.简称JS.首先,Javascript这个名字的由来就很有意思,不少人认为Javascript和Java貌似很像.容易想象成Java的脚本.但其实不然,两者之间没有任何关系.纯粹是商业碰瓷.​ 那么既然JS是可以运行在浏览器上......
  • pwn刷题笔记(格式化字符串)
    攻防世界:CGfsbchecksec查看保护机制,开启了NX和Canary,32位ELF。反汇编代码如下:intmain(){charbuf[0x7E-0x76];ebp-7Eshortintanonymous_0;ebp-76chars[0x74-0x10];ebp-74intanonymous_1;ebp-10anonymous_1=gs:14h//g......
  • java基于springboot的毕业生信息招聘平台、高校学生招聘管理系统、招聘管理系统,附源码
    1、项目介绍毕业生信息招聘平台的功能如下:管理管理员;首页、个人中心、企业管理、空中宣讲会管理、招聘岗位管理、毕业生管理、个人简历管理、求职信息管理、信息咨询管理、岗位应聘管理、线上面试管理、面试回复管理、试卷管理、试题管理、管理员管理、论坛管理、系统管理、考试......
  • java基于ssm的超市管理系统、超市销售管理系统,附源码+数据库+文档,适合课设设计、毕业
    1、项目介绍java基于ssm的超市管理系统、超市销售管理系统。本系统的设计是两种用户,一种是普通用户,一种是管理员用户。权限都不一样。主要功能有:添加商品、库存查询、订单管理、商品删除管理、退货管理、销售统计、供应商管理、用户管理、角色管理。项目获取,看这里2、技术框......