Given a String, and You have to validate whether the given String is Valid Roman Numeral or not. If it is valid print True else False.
Note: Numerals are lying between 1 to 3999.
Examples:
Input: String = IX Output: True Input: String = 54IVC Output: False
Roman numerals are based on below symbols.
SYMBOL VALUE I 1 IV 4 V 5 IX 9 X 10 XL 40 L 50 XC 90 C 100 CD 400 D 500 CM 900 M 1000
A number in Roman Numerals is a string of these symbols written in descending order(e.g. M’s first, followed by D’s, etc.). However, in a few specific cases, to avoid four characters being repeated in succession (such as IIII or XXXX), subtractive notation is often used as follows:
- I placed before V or X indicates one less, so four is IV (one less than 5) and 9 is IX (one less than 10).
- X placed before L or C indicates ten less, so forty is XL (10 less than 50) and 90 is XC (ten less than a hundred).
- C placed before D or M indicates a hundred less, so four hundred is CD (a hundred less than five hundred) and nine hundred is CM (a hundred less than a thousand).
Approach:
- The Regular Expression to check if a string is Valid Roman Numeral or not is this:
^M{0,3}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$
- In which,
-
M{0,3} specifies the thousands section and basically restrains it to between 0 and 4000
-
(CM|CD|D?C{0,3}) is for the hundreds section.
-
(XC|XL|L?X{0,3}) is for the tens place.
- Finally, (IX|IV|V?I{0,3}) is the units section.
-
M{0,3} specifies the thousands section and basically restrains it to between 0 and 4000
- Import regular expression and search the input string in the expression if the string exists return True else return False
Below is the implementation of the above approach.
// C++ program to validate the // Roman numeral #include <iostream> #include <regex> using namespace std;
// Function to validate the // Roman numeral bool ValidationOfRomanNumerals(string str)
{ // Regex to check valid
// ROMAN NUMERAL .
const regex pattern( "^M{0,3}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$" );
// If the str
// is empty return false
if (str.empty()) {
return false ;
}
// Return true if the str
// matched the ReGex
if (regex_match(str, pattern)) {
return true ;
}
else {
return false ;
}
} // Driver Code int main()
{ // Test Case 1:
string str1 = "IX" ;
cout << ValidationOfRomanNumerals(str1) << endl;
return 0;
} // This code is contributed by rahulchauhan2020model. |
// Java program to validate the // the Roman numeral import java.util.regex.*;
class GFG {
// Function to Validate the Roman numeral
public static boolean
ValidationOfRomanNumerals(String str)
{
// Regex to check Roman numeral
String regex
= "^M{0,3}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$" ;
// Compile the ReGex
Pattern p = Pattern.compile(regex);
// If the str
// is empty return false
if (str == null ) {
return false ;
}
// Pattern class contains matcher() method
// to find matching between given
// ROMAN NUMERAL regular expression.
Matcher m = p.matcher(str);
// Return if the str
// matched the ReGex
return m.matches();
}
// Driver Code.
public static void main(String args[])
{
// Test Case 1:
String str1 = "IX" ;
System.out.println(
"IS " + str1 + " valid ROMAN NUMERAL:? "
+ ValidationOfRomanNumerals(str1));
}
} // This code is contributed by rahulchauhan2020model. |
# Python3 program to Validate the Roman numeral # Function to Validate the Roman numeral def ValidationOfRomanNumerals(string):
# Importing regular expression
import re
# Searching the input string in expression and
# returning the boolean value
print ( bool (re.search(r "^M{0,3}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$" ,string)))
# Driver code # Given string string = "XI"
# Function call ValidationOfRomanNumerals(string) |
// C# program to validate // the Roman numeral using Regular Expression using System;
using System.Text.RegularExpressions;
class GFG
{ // Main Method
static void Main( string [] args)
{
// Input strings to Match
//the Roman numeral
string [] str={ "IX" };
foreach ( string s in str) {
Console.WriteLine( ValidationOfRomanNumerals(s) ? "true" : "false" );
}
Console.ReadKey(); }
// method containing the regex
public static bool ValidationOfRomanNumerals( string str)
{
string strRegex = @"^M{0,3}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$" ;
Regex re = new Regex(strRegex);
if (re.IsMatch(str))
return ( true );
else
return ( false );
}
} // This code is contributed by Rahul Chauhan |
// Javascript program to validate // ROMAN NUMERAL using Regular Expression // Function to validate the // ROMAN NUMERAL function ValidationOfRomanNumerals(str)
{ // Regex to check valid
// ROMAN NUMERAL
let regex = new RegExp(/^M{0,3}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/);
// str
// is empty return false
if (str == null ) {
return "false" ;
}
// Return true if the str
// matched the ReGex
if (regex.test(str) == true ) {
return "true" ;
}
else {
return "false" ;
}
} // Driver Code // Test Case 1: let str1 = "XI" ;
console.log(ValidationOfRomanNumerals(str1)); // This code is contributed by rahulchauhan2020model. |
True
Time Complexity: O(N) where N is the length of the given string.
Auxiliary Space: O(1)