题目:
请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度
思路:
首先定义一个数组列表longestSubstring 用来存放最长子字符串,并定义一个数组列表 cur用来存放正在遍历的字符。
遍历字符串的字符时。若字符没出现过,则加入cur,若该字符已经出现,则比较两个数组列表的长度,将长的一个赋给longestSubstring,并将cur清零,加入新遍历到的重复字符。最后遍历结束时,再次将两字符串进行比较,将长的一个赋给longestSubstring。
import java.util.ArrayList;
public class Solution {
public static ArrayList longestSubstringWithoutDuplication(String s)
{
for (int i = 0; i <s.length() ; i++) {
if (s.charAt(i)<'a'||s.charAt(i)>'z')
return new ArrayList();
}
ArrayList<Character> longestSubstring = new ArrayList<>();
ArrayList<Character> curlist = new ArrayList<>();
for (int i = 0; i <s.length() ; i++) {
if (!curlist.contains(s.charAt(i)))
curlist.add(s.charAt(i));
else
{
if (curlist.size()>=longestSubstring.size()) {
longestSubstring.clear();
longestSubstring.addAll(curlist);
curlist.clear();
}
else
curlist.clear();
curlist.add(s.charAt(i));
}
}
if (curlist.size()>=longestSubstring.size()) {
longestSubstring.clear();
longestSubstring.addAll(curlist);
}
return longestSubstring;
}
}