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
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 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 above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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 years
int 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
        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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

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<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));
    }
}

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 Program to find the total
# number of distinct years
  
# function to find the total
# number of distinct years
def distinct_years(str):
    str2 = ""
  
    uniqueDates = set()
  
    for i in range(len(str)):
        if str[i].isdigit():
            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 len(str2) == 4:
            uniqueDates.add(str2)
            str2 = ""
  
    # return the size of set
    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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Output:

2

Time Complexity:O(n)



My Personal Notes arrow_drop_up

Sometimes you never realize the value of a moment until it becomes a memory

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.