Problem: 763. 划分字母区间
文章目录
- 思路
- 复杂度
- Code
思路
👨🏫 代码随想录
 

复杂度
时间复杂度:  
     
      
       
       
         O 
        
       
         ( 
        
       
         n 
        
       
         ) 
        
       
      
        O(n) 
       
      
    O(n)
 空间复杂度:  
     
      
       
       
         O 
        
       
         ( 
        
       
         n 
        
       
         ) 
        
       
      
        O(n) 
       
      
    O(n)
Code
class Solution {
	public List<Integer> partitionLabels(String s)
	{
		// 创建哈希表来存储我们记录到字符串中的元素的最后下标
		int[] right = new int[26];
		int n = s.length();
		for (int i = 0; i < n; i++)
			right[s.charAt(i) - 'a'] = i;
		ArrayList<Integer> res = new ArrayList<>();
		int l = 0;// 当前段的起点
		int r = 0;// 当前段的终点
		for (int i = 0; i < n; i++)
		{
//			找到出现最远的字符,得到它的下标
			r = Math.max(r, right[s.charAt(i) - 'a']);
			if (i == r)
			{
				res.add(r - l + 1);
				l = i + 1;//开启下一段的起点
			}
		}
		return res;
	}
}




















