Find total number of distinct years from a string - GeeksforGeeks

19 Jan, 2022
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:  
Start traversing the string.Check if the current character is a digit. Store it in another string, i.e. dateString.Check if the current character is ‘-‘, then remove the characters stored in the dateString.Check if the length of the dateString is equal to 4, then it means that it is a year.Store that year in an unordered_set.Return the size of the unordered_set as it contains only unique values.
Start traversing the string.
Check if the current character is a digit. Store it in another string, i.e. dateString.
Check if the current character is ‘-‘, then remove the characters stored in the dateString.
Check if the length of the dateString is equal to 4, then it means that it is a year.
Store that year in an unordered_set.
Return the size of the unordered_set as it contains only unique values.
Below is the implementation of the above approach:  
C++
Java
Python3
C#
Javascript
// C++ Program to find the total// number of distinct years#include <bits/stdc++.h>using namespace std; // function to find the total// number of distinct yearsint distinct_year(string str){    string str2 = "";     unordered_set<string> 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 codeint main(){    string str = "UN was established on 24-10-1945."                 "India got freedom on 15-08-1947.";     cout << distinct_year(str);     return 0;}
import java.util.HashSet;import java.util.Set; // Java Program to find the total// number of distinct yearspublic class GFG { // function to find the total// number of distinct years    static int distinct_year(String str) {        String str2 = "";         Set<String> 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 Program to find the total# number of distinct years # function to find the total# number of distinct yearsimport redef 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 codeif __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# Program to find the total// number of distinct yearsusing 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<String> uniqueDates = new HashSet<String>();         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
<script> // Javascript Program to find the total// number of distinct years // function to find the total// number of distinct yearsfunction distinct_year(str){    var str2 = "";     var uniqueDates = new Set();     for (var i = 0; i < str.length; i++) {         if (parseInt(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.size;} // Driver codevar str = "UN was established on 24-10-1945." +             "India got freedom on 15-08-1947.";document.write( distinct_year(str)); </script>
2
Time Complexity:O(n) 
princiraj1992
gfg_sal_gfg
sanjeev2552
princi singh
ak4373515
noob2000
shairilkansal849
CPP-Functions
cpp-unordered_set
Strings
Strings
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Top 50 String Coding Problems for Interviews
Print all the duplicates in the input string
Vigenère Cipher
String class in Java | Set 1
sprintf() in C
Print all subsequences of a string
Convert character array to string in C++
How to Append a Character to a String in C
Program to count occurrence of a given character in a string
Naive algorithm for Pattern Searching