算法設計與分析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:



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章