Aizu Online Judge(AOJ)が提供している「プログラミング入門」(ITP1)の8_D問題をC++とPython で解いてみました。
ITP1 のトピック8では、文字について学びます。「プログラムで文字を扱う方法を学習します。」とあります。この学習コースを通じて、Python に慣れていきたいと考えています。
問題(8_D: Ring)
問題はリンク先をご覧ください。
ある文字列に別文字列が含まれるか判定する問題です。
解答案
C++ プログラム例(ITP1 8_D)
1文字づつ確認していく方法もありますが、判断する元の文字列を工夫します。s に s を連結して、p が含まれるか確認します。
string に用意されている以下の機能を使います。
- string は、+ 演算子で文字列の連結できる。
- find メソッドで、指定した文字列が含まれるか確認できる。
以下が、解答案のプログラムとなります。
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s, p;
cin >> s >> p;
s = s + s;
if (s.find(p) != string::npos) {
cout << "Yes" << endl;
} else {
cout << "No" << endl;
}
return 0;
}
Python プログラム例(ITP1 8_D)
Python の文字列も以下が使えます。
- + 演算子で文字列の連結できる。
- in 演算子で指定した文字列が含まれるか確認できる。
s = input()
s += s
p = input()
print("Yes" if p in s else "No")
上記プログラムは、すべて AOJ で「AC(Accepted=正解)」と判定されます。
最後に
C++ は、文字の配列として文字列を使うことができますが、やはり string クラスを使う方が簡潔に書けます。次のトピックでは、文字列を取り扱います。
引き続き、ITP1 の問題を紹介していきます。