Check string A can be shifted to get string B

Given two strings A and B, return whether or not A can be shifted some number of times to get B.

For example, if A is abcde and B is cdeab, return true. If A is abc and B is acb, return false.

Example:

Input:  str1 = "abcde", str2 = "cdeab"
Output: true

Approach

C++

#include <bits/stdc++.h>
using namespace std;

bool isSameAfterShifting(string str1string str2)
{
    // check if the strings are empty
    //or has different lengths
    if (str1.size() == 0 || str2.size() == 0 ||
        str1.size() != str2.size())
        return false;

    // check if the strings are the same
    if (str1 == str2)
        return true;

    // generate the array
    vector<stringarr;
    for (int i = 0i < str1.size(); i++)
    {
        string c = str1.substr(i+ str1.substr(0i);
        arr.push_back(c);
    }
    for (int i = 0i < arr.size(); i++)
    {
        if (arr[i] == str2)
            return true;
    }
    return false;
}
int main()
{
    string str1 = "abcde";
    string str2 = "cdeab";
    if (isSameAfterShifting(str1str2))
        cout << "true";
    else
        cout << "false";

    return 0;
}


No comments:

Post a Comment