# Find total number of distinct years from a string

• Difficulty Level : Medium
• Last Updated : 24 May, 2021

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
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
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.

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``        ``if` `(str[i] == ``'-'``) {``            ``str2.clear();``        ``}` `        ``// if length of str2 becomes 4``        ``// then store it in a set``        ``if` `(str2.length() == 4) {``            ``uniqueDates.insert(str2);``            ``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``):``    ``str2 ``=` `""` `    ``uniqueDates ``=` `set``()``    ``pattern``=``"[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]"``    ``dates ``=` `re.findall(pattern,``str``)``    ``for` `item ``in` `dates:``        ``uniqueDates.add(item.split(``'-'``)[``-``1``])``    ``# return the size of se``    ``return` `len``(uniqueDates)` `# 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``# sanjeev2552`

## 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)

My Personal Notes arrow_drop_up