Check if two same sub-sequences exist in a string or not
Last Updated :
30 May, 2022
Given a string, the task is to check if there exist two equal sub-sequences in the given string. Two sub-sequences are said to be equal if they have the same characters arranged in the same lexicographical order but the position of characters differs from that in the original string.
Examples:
Input: str = "geeksforgeeks"
Output: YES
Two possible sub-sequences are "geeks" and "geeks".
Input: str = "bhuvan"
Output: NO
Approach: The approach to solving this problem is to check if any character appears more than once. Since the minimal length of matching subsequence can be 1, hence if a character occurrence in a string more than once then two similar subsequences is possible. Initialize a freq[] array of length 26. Iterate over the string and increment the frequency of the characters. Iterate over the freq array and check if freq[i] for any i in the range of 0-26 is more than 1, then it is possible.
Below is the implementation of the above approach.
C++
// C++ program to Check if
// similar subsequences exist or not
#include <bits/stdc++.h>
using namespace std;
// Function to check if similar subsequences
// occur in a string or not
bool check(string s, int l)
{
int freq[26] = { 0 };
// iterate and count the frequency
for (int i = 0; i < l; i++) {
freq[s[i] - 'a']++; // counting frequency of the letters
}
// check if frequency is more
// than once of any character
for (int i = 0; i < 26; i++) {
if (freq[i] >= 2)
return true;
}
return false;
}
// Driver Code
int main()
{
string s = "geeksforgeeks";
int l = s.length();
if (check(s, l))
cout << "YES";
else
cout << "NO";
return 0;
}
Java
// Java program to Check
// if similar subsequences
// exist or not
import java.io.*;
import java.util.*;
import java.util.Arrays;
class GFG
{
// Function to check if
// similar subsequences
// occur in a string or not
static boolean check(String s,
int l)
{
int freq[] = new int[26];
Arrays.fill(freq, 0);
// iterate and count
// the frequency
for (int i = 0; i < l; i++)
{
// counting frequency
// of the letters
freq[s.charAt(i) - 'a']++;
}
// check if frequency is more
// than once of any character
for (int i = 0; i < 26; i++)
{
if (freq[i] >= 2)
return true;
}
return false;
}
// Driver Code
public static void main(String args[])
{
String s = "geeksforgeeks";
int l = s.length();
if (check(s, l))
System.out.print("YES");
else
System.out.print("NO");
}
}
Python3
# Python 3 program to Check if
# similar subsequences exist or not
# Function to check if similar subsequences
# occur in a string or not
def check(s, l):
freq = [0 for i in range(26)]
# iterate and count the frequency
for i in range(l):
# counting frequency of the letters
freq[ord(s[i]) - ord('a')] += 1
# check if frequency is more
# than once of any character
for i in range(26):
if (freq[i] >= 2):
return True
return False
# Driver Code
if __name__ == '__main__':
s = "geeksforgeeks"
l = len(s)
if (check(s, l)):
print("YES")
else:
print("NO")
# This code is contributed by
# Sahil_Shelangia
C#
// C# program to Check if similar subsequences
// exist or not
using System;
using System.Collections.Generic;
class GFG
{
// Function to check if similar subsequences
// occur in a string or not
static bool check(String s, int l)
{
int []freq = new int[26];
// iterate and count the frequency
for (int i = 0; i < l; i++)
{
// counting frequency of the letters
freq[s[i] - 'a']++;
}
// check if frequency is more
// than once of any character
for (int i = 0; i < 26; i++)
{
if (freq[i] >= 2)
return true;
}
return false;
}
// Driver Code
public static void Main(String []args)
{
String s = "geeksforgeeks";
int l = s.Length;
if (check(s, l))
Console.WriteLine("YES");
else
Console.WriteLine("NO");
}
}
// This code is contributed by PrinciRaj1992
JavaScript
<script>
// JavaScript program to Check
// if similar subsequences
// exist or not
// Function to check if
// similar subsequences
// occur in a string or not
function check(s, l)
{
let freq = new Array(26).fill(0);
// iterate and count
// the frequency
for (let i = 0; i < l; i++)
{
// counting frequency
// of the letters
freq[s[i].charCodeAt() - 'a'.charCodeAt()]++;
}
// check if frequency is more
// than once of any character
for (let i = 0; i < 26; i++)
{
if (freq[i] >= 2)
return true;
}
return false;
}
// Driver Code
let s = "geeksforgeeks";
let l = s.length;
if (check(s, l))
document.write("YES");
else
document.write("NO");
</script>
Time Complexity: O(N)
Auxiliary Space: O(1)
Note: If the length of a similar subsequence was mentioned, then the approach to solve the problem will also be different. The approach to check if a string contains two repeated subsequences of length two or more is discussed in this post.
Similar Reads
Check if there exists any sub-sequence in a string which is not palindrome Given a string s consisting of lowercase characters, the task is to check if there exists any subsequence in the string which is not a palindrome. If there is at least 1 such subsequence, then return true, otherwise return false.Examples: Input : str = "abaab"Output: YesExplanation: Subsequences "ab
7 min read
Queries to check if string B exists as substring in string A Given two strings A, B and some queries consisting of an integer i, the task is to check whether the sub-string of A starting from index i and ending at index i + length(B) - 1 equals B or not. If equal then print Yes else print No. Note that i + length(B) will always be smaller than length(A). Exam
15+ min read
Count substrings of same length differing by a single character from two given strings Given two strings S and T of length N and M respectively, the task is to count the number of ways of obtaining same-length substring from both the strings such that they have a single different character. Examples: Input: S = "ab", T = "bb"Output: 3Explanation: The following are the pairs of substri
7 min read
Check if a non-contiguous subsequence same as the given subarray exists or not Given an array arr[] consisting of N integers and two integer values L and R, indicating the starting and ending indices of a subarray, the task is to check if there exists a non-contiguous subsequence which is same as the given subarray or not. If found to be true, print "Yes". Otherwise, print "No
7 min read
Check whether two strings contain same characters in same order Given two strings s1 and s2, the task is to find whether the two strings contain the same characters that occur in the same order. For example string "Geeks" and string "Geks" contain the same characters in same order. Examples: Input: s1 = "Geeks", s2 = "Geks" Output: Yes Input: s1 = "Arnab", s2 =
9 min read