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: