算法设计与分析HW3:LeetCode3

Description:

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

Note:

  Note that the answer must be a substring, not a subsequence.

Solution:

此问题解决方法利用了JAVA的HashSet的数据结构来实现,HashSet是利用底层HashMap来存储所有元素的,因此能依据字符串下标更

方便地获取、添加、删除字符元素,具体实现步骤如下:

1.判断输入字符串是否为空,若是,返回0

2.初始化保存最大子字符串的哈希表、最大子字符串长度、子串开始位置、索引下标

3.当索引值小于字符串长度时跳转4,否则跳至6

4.获取当前索引下标指示的字符串的字符元素,若子串哈希表不存在该元素,将其加入表

5.若子串哈希表包含该字符元素,表示一个子串的终结,获取当前子串表的长度值,如果该值大于当前最大子串长度变量的值,

则将其赋值给该变量

6.将当前字符元素之前的所有字符元素移出子串哈希表,更新子串开始位置为当前索引下标的值,索引下标加1,跳回3

7.比较当前子串哈希表的长度值与当前保存最大子串长度变量的值,返回两者中较大的值。


Codes:;  


package HW3;

import java.util.HashSet;

public class HW3 
{
	public static int lengthOfLongestSubString(String s)
	{
		if(s==null||s.length()==0)
			return 0;
		
		HashSet<Character> stringSet=new HashSet<Character>();
		int subStringMax=0;
		
		int subStart=0;
		int index=0;
		
		while(index<s.length())
		{
			char c=s.charAt(index);
			if((stringSet.contains(c))==false)
			{
				stringSet.add(c);
			}
			else
			{
				subStringMax=Math.max(subStringMax, stringSet.size());
				
				while(subStart<index&&s.charAt(subStart)!=c)
				{
					stringSet.remove(s.charAt(subStart));
					subStart++;
				}
			}
			index++;
		
		}
	subStringMax=Math.max(subStringMax,stringSet.size());
	return subStringMax;
	
	}
}


Results:



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值