AtCoder Beginner Contest 322の解説記事です。
目次
ABC322 A – First ABC 2
問題
問題文の要約は以下の通りです。
問題の要約
A
, B
, C
からなる長さ \(N\) の文字列 \(S\) 与えられるので、ABC
が連続な部分文字列として初めて現れるのは何文字目か答えよ。
制約
・\(3 \le N \le 100\)
・\(S\) は A
, B
, C
からなる長さ \(N\) の文字列
入力
\(N\)
\(S\)
出力
\(S\) の中で ABC
が部分文字列として初めて現れる位置を出力せよ.。ただし、ABC
が \(S\) に現れない場合は -1
を出力せよ。
解説
ABC
が \(S\) に含まれているかどうかで場合分けを行い、ABC
が \(S\) に含まれているときはfind
関数で位置を特定します。
解説
まず入力 \(N\) をint
型、\(S\) を文字列として受け取ります。
# 入力
N=int(input())
S=input()
ABCがSに含まれていないときは-1
を出力、ABCがSに含まれているときはABC
が初めて現れる位置を出力します。0
から始まることに注意すると+1
が必要になります。
# ABCがSに含まれていないとき
if 'ABC' not in S:
print(-1)
# ABCがSに含まれているとき
else:
print(S.find('ABC')+1)
解答
# 入力
N=int(input())
S=input()
# ABCがSに含まれていないとき
if 'ABC' not in S:
print(-1)
# ABCがSに含まれているとき
else:
print(S.find('ABC')+1)
ABC322 B – Prefix and Suffix
問題
解説
\(S\) が \(T\) の接頭辞である判定はT.startswith(S)
、\(S\) が \(T\) の接尾辞である判定はT.endswith(S)
で行うことができるのでこれを使用します。
解説
まず入力を受け取ります。
# 入力
N,M=map(int,input().split())
S=input()
T=input()
接頭辞であり、かつ接尾辞でもある場合は0
、
接頭辞であるが、接尾辞でない場合は1
、
接尾辞であるが、接頭辞でない場合は2
、
接頭辞でも接尾辞でもない場合は3
を出力します。
# 接頭辞であり、かつ接尾辞でもある場合
if T.startswith(S) and T.endswith(S):
print(0)
# 接頭辞であるが、接尾辞でない場合
elif T.startswith(S):
print(1)
# 接尾辞であるが、接頭辞でない場合
elif T.endswith(S):
print(2)
# 接頭辞でも接尾辞でもない場合
else:
print(3)
解説
# 入力
N,M=map(int,input().split())
S=input()
T=input()
# 接頭辞であり、かつ接尾辞でもある場合
if T.startswith(S) and T.endswith(S):
print(0)
# 接頭辞であるが、接尾辞でない場合
elif T.startswith(S):
print(1)
# 接尾辞であるが、接頭辞でない場合
elif T.endswith(S):
print(2)
# 接頭辞でも接尾辞でもない場合
else:
print(3)