AIZU ONLINE JUDGE

AOJ ITP1 8_D(Ring)を解く

AOJ_ITP1_8_D

Aizu Online Judge(AOJ)が提供している「プログラミング入門」(ITP1)の8_D問題をC++とPython で解いてみました。

ITP1 のトピック8では、文字について学びます。「プログラムで文字を扱う方法を学習します。」とあります。この学習コースを通じて、Python に慣れていきたいと考えています。

問題(8_D: Ring)

問題はリンク先をご覧ください。

AOJ ITP1 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 の問題を紹介していきます。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA