- Trending Categories
Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
Physics
Chemistry
Biology
Mathematics
English
Economics
Psychology
Social Studies
Fashion Studies
Legal Studies
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Program to count number of unique subsequences of a string in C++
Suppose we have a string s, we have to find the number of non-empty unique subsequences of s. If the answer is very large then mod the result by 10^9 + 7.
So, if the input is like s = "xxy", then the output will be 5, as there are five subsequences: "x", "xx", "xy", "y" and "xxy".
To solve this, we will follow these steps −
m := 10^9 + 7
n := size of s
Define an array table of size 26
res := 0
for initialize i := 1, when i <= n, update (increase i by 1), do−
c := s[i − 1] − ASCII of 'a'
curr := (res + 1 − table[c] + m) mod m
res := (res + curr) mod m
table[c] := (table[c] + curr) mod m
return res
Let us see the following implementation to get better understanding −
Example
#include <bits/stdc++.h> using namespace std; const int m = 1e9 + 7; int solve(string s) { int n = s.size(); vector<int> table(26); long long res = 0; for (int i = 1; i <= n; ++i) { int c = s[i − 1] − 'a'; int curr = (res + 1 − table[c] + m) % m; res = (res + curr) % m; table[c] = (table[c] + curr) % m; } return res; } int main(){ string s = "xxy"; cout << solve(s); }
Input
"xxy"
Output
5
Advertisements