C++
 Computer >> コンピューター >  >> プログラミング >> C++

【C++】文字列を2文字回転させて別の文字列を取得できるか判定するプログラムの作成方法

問題の概要

2つの文字列「a」と「b」が与えられたとき、文字列「a」を反時計回りまたは時計回りにちょうど2文字分回転させることで、文字列「b」を得られるかどうかを判定します。

入力例1

a = google
b = legoog

出力:

True

解説: 文字列「google」を反時計回りに2文字分回転すると「legoog」になります。したがって、True を返します。

入力例2

a = tuorialst
b = tutorials

出力:

False

解説: 文字列「tuorialst」は、どちらの方向に2文字分回転しても「tutorials」にはなりません。したがって、False を返します。

この問題を解くためのアプローチ

与えられた2つの文字列に対して、このアプローチでは次の2つの場合を考えます。

  • 反時計回りの回転の場合
  • 時計回りの回転の場合

まず、両方の文字列の長さが異なる場合は false を返します。また、どちらかの文字列の長さが「2」以下の場合は、単純に2つの文字列が等しいかどうかを比較した結果を返します。

それ以外の場合は、文字列「b」を反時計回りに2文字分回転して得られる部分文字列が文字列「a」と等しいかどうかを確認し、等しければ true を返します。そうでなければ false を返します。

同様に、文字列「b」を時計回りに2文字分回転した結果が文字列「a」と等しくなる場合は true を返し、どちらにも当てはまらない場合は false を返します。

アルゴリズムの手順

  • 2つの入力文字列「a」と「b」を受け取ります。
  • ブール型関数 checkRotated(string a, string b) は、2つの文字列を受け取り、文字列「b」を反時計回りまたは時計回りに2文字分回転させたときに文字列「a」と等しくなるかどうかを返します。
  • 文字列「a」と文字列「b」の長さを確認します。
  • 文字列「b」を反時計回りに2文字分回転した部分文字列を求めます。
  • 結果の部分文字列が文字列「a」と等しいかどうかを確認し、等しければ true を返します。
  • 文字列「b」を時計回りに2文字分回転した部分文字列を求めます。
  • 結果の部分文字列が文字列「a」と等しいかどうかを確認し、等しければ true を返します。
  • いずれの条件も満たさない場合は false を返します。

コード例

#include<bits/stdc++.h>
using namespace std;
bool checkRotated(string str1, string str2){
    if (str1.length() != str2.length())
        return false;
    if(str1.length() <= 2 || str2.length() <= 2)
        return (str1 == str2);
    string s1= str2.substr(str2.size()-2, str2.size());
    string s2= str2.substr(0,str2.size()-2);
    string s3= s1+s2;
    if(s3==str1)
        return true;
    string s4= str2.substr(2,str2.size());
    string s5= str2.substr(0,2);
    string s6= s4+s5;
    if(s6==str1)
        return true;
    return false;
}
int main(){
    string a= "google";
    string b="legoog";
    cout<<checkRotated(a,b)<<endl;
    return 0;
}

出力

上記のコードを実行すると、次の出力が表示されます。

1

上記のコードの判定結果は「True」であるため、ブール値として「1」が出力されます。

  1. C++で2つの2進数文字列を加算するプログラムの書き方

    2つの2進数を表す文字列が与えられたとき、それらを加算した結果を求め、その結果を2進数の文字列として返すことを考えます。2進数とは、0か1のいずれかで表現される数値のことです。2進数同士を足し合わせる際には、以下のような2進数特有の加算ルールに従う必要があります。0+0 → 0 0+1 → 1 1+0 → 1 1+1 → 0(繰り上がり1)入力例str1 = {11}, str2 = {1}出力例100入力例str1 = {110}, str2 = {1}出力例111問題を解くためのアプローチ両方の文字列を末尾(最下位桁)から走査する対応する桁の2進数同士を加算する1と1を足した場合は、その桁

  2. Pythonで文字列を2文字回転させて別の文字列と一致するか判定する方法

    この記事では、Pythonを使って「ある文字列を左または右に2文字回転させると、もう一方の文字列と一致するかどうか」を判定する方法を解説します。問題の概要2つの文字列 s と t が与えられたとき、t を左方向または右方向のどちらかに2文字分回転させることで s が得られるかどうかを確認します。例えば、入力が s = kolkata、t = takolka の場合を見てみましょう。「takolka」を左に2文字回転させると「kolkata」になるため、出力は True となります。解決の手順この問題は以下のステップで解決できます。まず、s と t の文字数が異なる場合は、回転しても一致すること