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:
- 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.
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 <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 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<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
# 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<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 |
Javascript
<script> // Javascript Program to find the total // number of distinct years // function to find the total // number of distinct years function 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 code var 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), where n is the size of the given string.
Auxiliary Space: O(n)
Please Login to comment...