Examine if a personality is simply occurring as one single contiguous substring or not


View Dialogue

Enhance Article

Save Article

Like Article

Given string str of size N. The duty is to find out whether or not a personality is simply occurring as a single contiguous substring or not i.e., there shouldn’t exist every other alphabet characters in between two identical alphabets within the string.

Examples:

Enter: “aAa”
Output: False
Rationalization: There exists ‘A’ in between ‘a’ and ‘a’. Therefore “aa” turns into discontinuous.

Enter: “aaAAbbBB”
Output: True
Rationalization: Completely different segments fashioned from the given enter are “aa”, “AA”, “bb” and “BB” are all steady and haven’t any hurdles in between.

 

Method: To unravel the given drawback use the next concept:

Retailer the final prevalence of every character in Hash-Map in order that it may be in contrast with its earlier prevalence and discover the space between them. If this distance involves be greater than 1 then it’s discontinuous else steady.

Comply with the given steps to resolve the given drawback:

  • Traverse string str (say i).
  • If str[i] is current within the map
    • If the distinction between the final prevalence and (i + 1) is equal to 1 then replace the final prevalence of the i-th character.
    • Else return false.
  • Else replace the final prevalence of i-th character within the Hash map as (i + 1).
  • Return True after the loop is over.

Beneath is the implementation for the above strategy:

C++14

#embrace <bits/stdc++.h>

utilizing namespace std;

  

bool isContinuous(string& temp)

{

    

    

    unordered_map<char, int> last_Pos;

  

    for (int i = 0; i < temp.size(); i++) {

        

        

        if (last_Pos[temp[i]]) {

            

            

            

            if (i - last_Pos[temp[i]] + 1 <= 1) {

                last_Pos[temp[i]] = i + 1;

            }

            else {

                return 0;

            }

        }

        else {

            last_Pos[temp[i]] = i + 1;

        }

    }

    return 1;

}

  

int principal()

{

    string str = "aaAAbbBB";

    if (isContinuous(str)) {

        cout << "True";

    }

    else {

        cout << "False";

    }

    return 0;

}

Time Complexity: O(N)
Auxiliary Area: O(N)

Leave a Reply

Your email address will not be published.