AIZU ONLINE JUDGE ITP1_8_Dをpythonで解いてみた

python

本サイトAIZU ONLINE JUDGE ITP1_8_D へはこちらから

目次

問題:リング

図のようなリング状の文字列 s の任意の位置から、時計回りに連続した文字をいくつか選んで、文字列 p が作れるかを判定するプログラムを作成してください。

Input

1行目に文字列 s が与えられます。
2行目に文字列 p が与えられます。

Output

p が作れる場合は Yes と、作れない場合は No と1行に出力してください。

Sample Input 1

vanceknowledgetoad
advance

Sample Output 1

Yes

Sample Input 2

vanceknowledgetoad
advanced

Sample Output 2

No

解答例

s = input()
p = input()
s = s * 2
if s.find(p) != -1:
    print('Yes')
else:
    print('No')

解説

以下のように解いていきます。

  1. 文字列 s 、pの読み込み
  2. sがpの中にあるか判定

文字列s、文字列pを別々に読み込みます。ここでは、input関数を使用し、それぞれ任意の文字列を取得します。

# キーボードからの入力を文字列として受け取る
s = input()
p = input()

※サイト内「AIZU ONLINE JUDGE ITP1_1_Bをpythonで解いてみた」の、input関数とはに使用方法が書かれておりますのでぜひご覧ください。

まずは、sを2倍し、sの初めと最後の文字をつなぎます。そしてfindメソッドを用いて、文字列pが存在するか確認します。

ここで使用するfindメソッドについて説明します。

findメソッドとは

findメソッドは文字列型のメソッドで、基本的な文字列の検索方法になります。findメソッドはこのように使います。

str.find(sub[, start[, end]])

引数に指定した文字列( sub )が文字列 str の中で最初に現れる位置をインデックスで返します。範囲を指定する start と end は省略可能です。

実際の使い方は次の通りです。

st_found = "Hello, Python and Perl and Ruby and more."
fd = st.find('Python')
print(fd)

# 出力
7

st_not_fount = "Hello, Python and Perl and Ruby and more."
fd = st.find('Haskell')
print(fd)

# 出力
-1

出力結果は、findメソッドの引数に渡した文字列が、検索対象の文字列の中にある場合のインデックスを表しています。st_foundの文字列にfindメソッドを使用した際に「7」という数字が返されたので、検索対象の変数st_foundの、インデックスで7番目に「Python」という文字が見つかったことが分かります。これがPythonの基本的な文字列の検索方法になります。

また、st_not_fountにfindメソッドを使用した際は、検索した文字列’Haskell’が検索対象の文字列にないので、「-1」を返します。このように指定した文字列が見つからなかった場合には -1 が返されます。

今回は、sの中にpが存在する場合、つまり、findメソッドの検索結果である戻り値が-1でない場合’Yes’を表示します。存在しない場合’No’を表示します。

# s を2倍しsの文字列の最初と最後をつなぐ
s = s * 2
# sの中にpがあるか判定する。
if s.find(p) != -1:
    print('Yes')
else:
    print('No')

最後に、もう一度プログラムを確認してみましょう。

# キーボードからの入力を文字列として受け取る
s = input()
p = input()

# s を2倍しsの文字列の最初と最後をつなぐ
s = s * 2
# sの中にpがあるか判定する。
if s.find(p) != -1:
    print('Yes')
else:
    print('No')
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

雇われのシステムエンジニアです。
普段は車載ECUのセキュリティー分野に従事しております。

■保有資格
Salesforce 認定 Platform アプリケーションビルダー
Salesforce 認定 Platform デベロッパー

コメント

コメントする

目次