 GFG App
Open App Browser
Continue

# Find total number of distinct years from a string

Given a string containing the words and dates, the task is to find the total number of distinct years mentioned in that string.
Note: Assuming that the date will be in ‘DD-MM-YYYY’ format.

Examples:

Input:  str = “UN was established on 24-10-1945. India got freedom on 15-08-1947.”
Output: 2
Explanation: 2 distinct years i.e. 1945 and 1947 have been referenced.

Input: str = “Soon after the world war 2 ended on 02-09-1945. The UN was established on 24-10-1945.”
Output: 1
Explanation: Only 1 Year, i.e 1945 has been referenced .

Approach:

1. Start traversing the string.
2. Check if the current character is a digit. Store it in another string, i.e. dateString.
3. Check if the current character is ‘-‘, then remove the characters stored in the dateString.
4. Check if the length of the dateString is equal to 4, then it means that it is a year.
5. Store that year in an unordered_set.
6. Return the size of the unordered_set as it contains only unique values.

Note: For Python, ‘(\d+-\d+-\d+)’ can be used in place of ‘[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]’ as an alternate regular expression.

Below is the implementation of the above approach:

## C++

 `// C++ Program to find the total` `// number of distinct years` `#include ` `using` `namespace` `std;`   `// function to find the total` `// number of distinct years` `int` `distinct_year(string str)` `{` `    ``string str2 = ``""``;`   `    ``unordered_set uniqueDates;`   `    ``for` `(``int` `i = 0; i < str.length(); i++) {`   `        ``if` `(``isdigit``(str[i])) {` `            ``str2.push_back(str[i]);` `        ``}`   `        ``// if we found - then clear the str2` `        ``else` `if` `(str[i] == ``'-'``) {` `            ``str2.clear();` `        ``}`   `        ``// if length of str2 becomes 4` `        ``// then store it in a set` `        ``else` `if` `(str2.length() == 4) {` `            ``uniqueDates.insert(str2);` `            ``str2.clear();` `        ``}` `        `  `        ``// else clear the string.` `        ``else``{` `           ``str2.clear();` `        ``}` `    ``}`   `    ``// return the size of set` `    ``return` `uniqueDates.size();` `}`   `// Driver code` `int` `main()` `{` `    ``string str = ``"UN was established on 24-10-1945."` `                 ``"India got freedom on 15-08-1947."``;`   `    ``cout << distinct_year(str);`   `    ``return` `0;` `}`

## Java

 `import` `java.util.HashSet;` `import` `java.util.Set;`   `// Java Program to find the total ` `// number of distinct years ` `public` `class` `GFG {`   `// function to find the total ` `// number of distinct years ` `    ``static` `int` `distinct_year(String str) {` `        ``String str2 = ``""``;`   `        ``Set uniqueDates = ``new` `HashSet<>();`   `        ``for` `(``int` `i = ``0``; i < str.length(); i++) {`   `            ``if` `(Character.isDigit(str.charAt(i))) {` `                ``str2 += (str.charAt(i));` `            ``}`   `            ``// if we found - then clear the str2 ` `            ``if` `(str.charAt(i) == ``'-'``) {` `                ``str2 = ``""``;` `            ``}`   `            ``// if length of str2 becomes 4 ` `            ``// then store it in a set ` `            ``if` `(str2.length() == ``4``) {` `                ``uniqueDates.add(str2);` `                ``str2 = ``""``;` `            ``}` `        ``}`   `        ``// return the size of set ` `        ``return` `uniqueDates.size();` `    ``}`   `// Driver code ` `    ``static` `public` `void` `main(String[] args) {` `        ``String str = ``"UN was established on 24-10-1945."` `                ``+ ``"India got freedom on 15-08-1947."``;`   `        ``System.out.println(distinct_year(str));` `    ``}` `}`

## Python3

 `# Python3 Program to find the total` `# number of distinct years`   `# function to find the total` `# number of distinct years` `import` `re`     `def` `distinct_years(``str``):` `    ``matches ``=` `re.findall(r``'(\d+-\d+-\d+)'``, ``str``)  ``# regex` `    ``# extracting distinct years` `    ``years ``=` `set``(i[``-``4``:] ``for` `i ``in` `matches)` `    ``return` `len``(years)`     `# Driver code` `if` `__name__ ``=``=` `"__main__"``:` `    ``str` `=` `"UN was established on ``24``-``10``-``1945.``\` `        ``India got freedom on ``15``-``08``-``1947.``"`   `    ``print``(distinct_years(``str``))`   `# This code is contributed by` `# kshitijmagare19`

## C#

 `// C# Program to find the total ` `// number of distinct years ` `using` `System;` `using` `System.Collections.Generic; `   `class` `GFG ` `{`   `    ``// function to find the total ` `    ``// number of distinct years ` `    ``static` `int` `distinct_year(String str)` `    ``{` `        ``String str2 = ``""``;`   `        ``HashSet uniqueDates = ``new` `HashSet();`   `        ``for` `(``int` `i = 0; i < str.Length; i++)` `        ``{` `            ``if` `(``char``.IsDigit(str[i])) ` `            ``{` `                ``str2 += (str[i]);` `            ``}`   `            ``// if we found - then clear the str2 ` `            ``if` `(str[i] == ``'-'``)` `            ``{` `                ``str2 = ``""``;` `            ``}`   `            ``// if length of str2 becomes 4 ` `            ``// then store it in a set ` `            ``if` `(str2.Length == 4) ` `            ``{` `                ``uniqueDates.Add(str2);` `                ``str2 = ``""``;` `            ``}` `        ``}`   `        ``// return the size of set ` `        ``return` `uniqueDates.Count;` `    ``}`   `    ``// Driver code ` `    ``static` `public` `void` `Main(String[] args) ` `    ``{` `        ``String str = ``"UN was established on 24-10-1945."` `+ ` `                     ``"India got freedom on 15-08-1947."``;`   `        ``Console.WriteLine(distinct_year(str));` `    ``}` `}`   `// This code is contributed by Princi Singh`

## Javascript

 ``

Output

`2`

Time Complexity: O(n), where n is the size of the given string.
Auxiliary Space: O(n)

My Personal Notes arrow_drop_up