1 class Solution 2 { 3 public: 4 int distinctSubseqII(string S) 5 { 6 int n = S.size(); 7 int mod = 1000000007; 8 int h[2002],last[2002],dp[2002]; 9 char a[2002]; 10 memset(h,0,sizeof(h)); 11 memset(last,0,sizeof(last)); 12 memset(dp,0,sizeof(dp)); 13 for(int i=1; i<=n; ++i) 14 { 15 a[i]=S[i-1]; 16 last[i]=h[a[i]]; 17 h[a[i]]=i; 18 } 19 for(int i=1; i<=n; ++i) 20 { 21 if(!last[i]) dp[i]=dp[i-1]*2+1; 22 else dp[i]=dp[i-1]+dp[i-1]-dp[last[i]-1]; 23 if(dp[i]<0) dp[i]+=mod; 24 dp[i]%=mod; 25 } 26 return dp[n]; 27 } 28 };
 
                   
                   
                   
                   本文介绍了一种使用C++解决字符串子序列计数问题的方法。通过动态规划和哈希表,算法能够高效地计算出给定字符串的所有不同子序列的数量。特别注意的是,算法在处理大量数据时采取了模运算以避免整数溢出。
本文介绍了一种使用C++解决字符串子序列计数问题的方法。通过动态规划和哈希表,算法能够高效地计算出给定字符串的所有不同子序列的数量。特别注意的是,算法在处理大量数据时采取了模运算以避免整数溢出。
           
       
           
                 
                 
                 
                 
                 
                
               
                 
                 
                 
                 
                
               
                 
                 扫一扫
扫一扫
                     
              
             
                   337
					337
					
 被折叠的  条评论
		 为什么被折叠?
被折叠的  条评论
		 为什么被折叠?
		 
		  到【灌水乐园】发言
到【灌水乐园】发言                                
		 
		 
    
   
    
   
             
            


 
            