Check if a two character string can be made using given words
Last Updated :
20 Jul, 2022
Given a string of two characters and n distinct words of two characters. The task is to find if it is possible to arrange given words in such a way that the concatenated string has the given two character string as a substring. We can append a word multiple times.
Examples:
Input : str = "ya"
words[] = {"ah", "oy", "to", "ha"}
Output : YES
We can join "oy" and then "ah", and
then "ha" to form the string "oyahha"
which contains the string "ya".
So, the answer is "YES"
Input : str[] = "ha"
words[] = "ah"
Output :YES
The string "ahah" contains "ha"
as a substring.
Input : str = "hp"
words[] = {"ht", "tp"|
Output :NO
We can't produce a string containing
"hp" as a sub-string. Note that we
can join "ht" and then "tp" producing
"http", but it doesn't contain the
"hp" as a sub-string.
If we look at the given examples carefully, we can see that our answer will be "YES" if any of the following conditions is true,
- str is equal to any one of the N words
- str is equal to reverse of any of the words.
- It first letter of str is equal to last letter of any of the given N strings and last letter is equal to the first letter of any of the given N strings.
Otherwise our output will always be NO.
Below is the implementation of the above approach.
C++
// CPP code to check if a two character string can
// be made using given strings
#include <bits/stdc++.h>
using namespace std;
// Function to check if str can be made using
// given words
bool makeAndCheckString(vector<string> words, string str)
{
int n = words.size();
bool first = false, second = false;
for (int i = 0; i < n; i++) {
// If str itself is present
if (words[i] == str)
return true;
// Match first character of str
// with second of word and vice versa
if (str[0] == words[i][1])
first = true;
if (str[1] == words[i][0])
second = true;
// If both characters found.
if (first && second)
return true;
}
return false;
}
// Driver Code
int main()
{
string str = "ya";
vector<string> words = { "ah", "oy", "to", "ha"};
if (makeAndCheckString(words, str))
cout << "Yes";
else
cout << "No";
return 0;
}
Java
// Java code to check if a two character string can
// be made using given strings
import java.util.*;
class GFG
{
// Function to check if str can be made using
// given words
static boolean makeAndCheckString(Vector<String> words,
String str)
{
int n = words.size();
boolean first = false, second = false;
for (int i = 0; i < n; i++)
{
// If str itself is present
if (words.get(i) == str)
return true;
// Match first character of str
// with second of word and vice versa
if (str.charAt(0) == words.get(i).charAt(1))
first = true;
if (str.charAt(1) == words.get(i).charAt(0))
second = true;
// If both characters found.
if (first && second)
return true;
}
return false;
}
// Driver Code
public static void main(String[] args)
{
String str = "ya";
String[] array = { "ah", "oy", "to", "ha"};
Vector<String> words = new Vector<String>(Arrays.asList(array));
if (makeAndCheckString(words, str))
System.out.println("Yes");
else
System.out.println("No");
}
}
// This code is contributed by 29AjayKumar
Python3
# Python3 code to check if a two character string can
# be made using given strings
# Function to check if str can be made using
# given words
def makeAndCheckString(words, str):
n = len(words)
first = second = False
for i in range(n):
# If str itself is present
if words[i]==str:
return True
# Match first character of str
# with second of word and vice versa
if str[0] == words[i][1]:
first = True
if str[1] == words[i][0]:
second = True
# If both characters found.
if first and second:
return True
return False
# Driver Code
str = 'ya'
words = ['ah', 'oy', 'to', 'ha']
if makeAndCheckString(words, str):
print('YES')
else:
print('NO')
# This code is contributed
# by SamyuktaSHegde
C#
// C# code to check if a two character string can
// be made using given strings
using System;
using System.Collections.Generic;
class GFG
{
// Function to check if str can be made using
// given words
static bool makeAndCheckString(List<String> words,
String str)
{
int n = words.Count;
bool first = false, second = false;
for (int i = 0; i < n; i++)
{
// If str itself is present
if (words[i] == str)
return true;
// Match first character of str
// with second of word and vice versa
if (str[0] == words[i][1])
first = true;
if (str[1] == words[i][0])
second = true;
// If both characters found.
if (first && second)
return true;
}
return false;
}
// Driver Code
public static void Main(String[] args)
{
String str = "ya";
String[] array = { "ah", "oy", "to", "ha"};
List<String> words = new List<String>(array);
if (makeAndCheckString(words, str))
Console.WriteLine("Yes");
else
Console.WriteLine("No");
}
}
// This code is contributed by Princi Singh
PHP
<?php
// PHP code to check if a two character string can
// be made using given strings
// Function to check if str can be made using
// given words
function makeAndCheckString($words, $str)
{
$n = sizeof($words) ;
$first = false ;
$second = false;
for ($i = 0; $i < $n; $i++) {
// If str itself is present
if ($words[$i] == $str)
return true;
// Match first character of str
// with second of word and vice versa
if ($str[0] == $words[$i][1])
$first = true;
if ($str[1] == $words[$i][0])
$second = true;
// If both characters found.
if ($first && $second)
return true;
}
return false;
}
// Driver Code
$str = "ya";
$words = array( "ah", "oy", "to", "ha") ;
if (makeAndCheckString($words, $str))
echo "Yes";
else
echo "No";
// This code is contributed by Ryuga
?>
JavaScript
<script>
// Javascript code to check if a two character string can
// be made using given strings
// Function to check if str can be made using
// given words
function makeAndCheckString(words, str)
{
let n = words.length;
let first = false, second = false;
for (let i = 0; i < n; i++)
{
// If str itself is present
if (words[i] == str)
return true;
// Match first character of str
// with second of word and vice versa
if (str[0] == words[i][1])
first = true;
if (str[1] == words[i][0])
second = true;
// If both characters found.
if (first && second)
return true;
}
return false;
}
let str = "ya";
let words = [ "ah", "oy", "to", "ha"];
if (makeAndCheckString(words, str))
document.write("YES");
else
document.write("NO");
// This code is contributed by suresh07.
</script>
Time Complexity: O(n), where n represents the size of the given vector.
Auxiliary Space: O(1), no extra space is required, so it is a constant.
Similar Reads
Check if a given string is made up of two alternating characters Given a string str, the task is to check whether the given string is made up of only two alternating characters.Examples: Input: str = "ABABABAB" Output: YesInput: str = "XYZ" Output: No Recommended: Please try your approach on {IDE} first, before moving on to the solution.Approach: In order for the
11 min read
Check if characters of a given string can be used to form any N equal strings Given a string S and an integer N, the task is to check if it is possible to generate any string N times from the characters of the given string or not. If it is possible, print Yes. Otherwise, print No. Examples: Input: S = "caacbb", N = 2Output: YesExplanation: All possible strings that can be gen
5 min read
Check if number of distinct characters in 2 Strings can be made equal Given two strings A and B of lowercase English letters of lengths N and M respectively. Check whether the number of distinct characters in both strings A and B can be made equal by applying the operation at most one time. Where operation is: Choose any index i such that 0 ⤠i ⤠N from string A and i
15 min read
Check whether second string can be formed from characters of first string Given two strings str1 and str2, check if str2 can be formed from str1 Example : Input : str1 = geekforgeeks, str2 = geeksOutput : YesHere, string2 can be formed from string1. Input : str1 = geekforgeeks, str2 = andOutput : NoHere string2 cannot be formed from string1. Input : str1 = geekforgeeks, s
5 min read
Possible Words using given characters in Python Given a dictionary and a character array, print all valid words that are possible using characters from the array. Note: Repetitions of characters is not allowed. Examples: Input : Dict = ["go","bat","me","eat","goal","boy", "run"] arr = ['e','o','b', 'a','m','g', 'l'] Output : go, me, goal. This pr
5 min read