public void generateFirstDs(){
		
		Map<String, Integer> charAccessTimes = new HashMap<String, Integer>();
		
		// 统计每个字符出现的次数，同时记录suffix
		for(int i = 0; i < inputSegments.size();i++){
			String segment = inputSegments.get(i);
			
			for(int k = 0; k < segment.length(); k++){
				String currentChar = segment.substring(k, k + 1);
				
				// 统计每个字符出现的次数
				Integer count = charAccessTimes.get(currentChar) == null ? 0 : charAccessTimes.get(currentChar);
				charAccessTimes.put(currentChar, count + 1);
				
				// 记录suffix，每个字符只记录一次，防止重复
				int start = segment.indexOf(currentChar);
				if(start != k || start == segment.length() - 1){
					continue;
				}
				if(Ds.get(currentChar) == null){
					Ds.put(currentChar, new SubsequenceSuffix());
				}
				Ds.get(currentChar).addSuffix(segment.substring(start + 1));
			}
		}
		
		// 过滤掉出现次数小于minSupport的子序列
		for(Map.Entry<String, Integer> entry: charAccessTimes.entrySet()){
			if(entry.getValue() < minSupport){
				Ds.remove(entry.getKey());
			}
			else{
				Ds.get(entry.getKey()).setOccurTimes(entry.getValue());
				Ds.get(entry.getKey()).setSubsequence(entry.getKey());
			}
		}
	}