LeetCode进阶之路(Longest Substring Without Repeating Characters)

本文探讨了一种寻找给定字符串中最长无重复字符子串的方法。通过列举所有可能的子串并检查重复字符来确定最长的有效子串。虽然这种方法时间复杂度较高,但为理解基本原理提供了清晰的路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Given a string, find the length of the longest substring without repeating characters.

Examples:

Given "abcabcbb", the answer is "abc", which the length is 3.

Given "bbbbb", the answer is "b", with the length of 1.

Given "pwwkew", the answer is "wke", with the length of 3. Note that the answer must be a substring"pwke" is a subsequence and not a substring.

选出不重复的最长子串。

首先想到的是一个很土办法,把字符串中所有的子串全部存到一个list中,然后遍历每个子串,看是否有重复字母,如果没有,就存到map中,最后遍历map得到长度最大的子串,可惜这个方法耗时太长,提交不通过,先记录下这个土办法,明天有空在想想其他的思路。

public static int lengthOfLongestSubstring(String s) {
		 if(s.length() == 1){
			 return 1;
		 	}
	      List<String> list = new ArrayList<String>();
	      for(int i = 0; i<s.length();i++){
	    	  for(int j = i+1;j<=s.length();j++) {
	    		  list.add(s.substring(i, j));
	    	  }
	      }
	      
	      Map<Integer,String> map = new HashMap<Integer,String>();
	      
	      for (String string : list) {
	    	  List<String> list1 = new ArrayList<String>();
	    	  boolean flag = false;
			for(int i = 0; i<string.length();i++){
				if(list1.contains(string.substring(i, i+1))){
					flag = true;
					break;
				}else {
					list1.add(string.substring(i, i+1));
				}
			}
			if(!flag){
				map.put(string.length(), string);
			}
		}
	      int max = 0;
	     for(Integer in : map.keySet()){
	    	 if(max<in){
	    		 max = in;
	    	 }
	     }
	     return max;
	   }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值