AtCoder

ABC322 B問題(Prefix and Suffix)を解く

AtCoder_ABC322_B

AtCoder が提供しているABC(AtCoder Beginner Contest)322 のB問題をC++とPythonで解いてみました。ABC322は、2023年9月30日21:00に実施されました。

AtCoder の紹介はこちらに、プログラミングの方針はこちらに記事があります。

B問題 Prefix and Suffix(Difficulty : 54)

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

ABC322 B問題 Prefix and Suffix

文字列から部分文字列を切り取る方法が学べます。AtCoder Problems による Difficulty は 54 でした。

解答案

C++ プログラム例(ABC322B)

C++では、substr メソッドで部分文字列を切り出すことができます。第1引数は開始位置、第2引数は長さになります。

  • 文字列の先頭n文字を切り取るには、substr(0, n) となります。
  • 長さmの文字列の後ろn文字を切り取るには、substr(m – n, n) となります。

以下が、C++プログラムとなります。

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

int main()
{
	int n, m;
	cin >> n >> m;
	string s, t;
	cin >> s >> t;

	if ((s == t.substr(0, n))&&(s == t.substr(m - n, n))) {
		cout << 0 << endl;
	} else if (s == t.substr(0, n)) {
		cout << 1 << endl;
	} else if (s == t.substr(m - n, n)) {
		cout << 2 << endl;
	} else {
		cout << 3 << endl;
	}

	return 0;
}

AC(Accepted=正しいプログラム)と判定されました。

Python プログラム例(ABC322B)

Python では、スライス記法で文字列が切り取れます。スライス記法では、開始位置と終了位置を半開区間 [開始位置, 終了位置) として指定します。

  • 文字列の先頭n文字を切り取るには、[0:n] となります。
  • 長さmの文字列の後ろn文字を切り取るには、[m – n:m] となります。
"""AtCoder Beginner Contest 322 B"""
n, m = map(int, input().split())
s = input()
t = input()

if s == t[0:n] and s == t[m - n:m]:
    result = 0
elif s == t[0:n]:
    result = 1
elif s == t[m - n:m]:
    result = 2
else:
    result = 3

print(result)

こちらも「AC」と判定されました。

最後に

C++のsubstrと、Pythonのスライス記法は、指定の仕方が異なります。個人的には、半開区間を指定するスライス記法の方が分かりやすいと感じます。

引き続き ABC の問題を紹介していきます。

COMMENT

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

CAPTCHA