第154回【Python】文字列の1、2文字目、文字列の n 文字目と n + 1 文字目、文字列の重複カウント

現在取り組んでいるのは、paiza ラーニング問題集「B ランクレベルアップメニュー」になります。

はじめに

猫とキャンプと野球観戦と AWS が大好きな旦那、LeoSaki です。モフモフしたい。

Python をゼロから勉強してみよう、のコーナー 154 回目です。

業務都合上、基本は出社します。コロナ前、コロナ中、コロナ後と人の流れを見ていると、一気にコロナ前に近い状態へ人の流れが戻ってきたように感じます。リモートよりも出社、なのかなぁ。

それでは、今日も頑張ってみようと思います。

今回取り組む内容について

以下は、前回までに取り組んだ問題とまったく同じなので、飛ばします。
コードは数書いてナンボとかカッコつけたこと書いてましたが、あまりにも多いので挫折しました。

STEP: 1 文字列の長さ
STEP: 2 文字列の1文字目
STEP: 3 1文字ずつ出力

文字列の1、2文字目 (paizaランク D 相当)

文字列 s が入力されるので、1文字目と2文字目を出力してください。

s

期待する出力

1文字目と2文字目を半角スペース区切りで出力してください。
最後は改行し、余計な文字、空行を含んではいけません。


すべてのテストケースにおいて、以下の条件をみたします。

2 ≦ (文字列 s の長さ) ≦ 10,000
文字列 s は、半角アルファベットで構成された文字列


入力例

read

出力例

r e

10,000 文字の文字列の中から 1 文字目と 2 文字目だけ抜き出すとか、どんな苦行か。

Python
s = input()
print(s[0],s[1])
VBA
Sub count_string_3()

    s = Cells(1, 1)
    Debug.Print Mid(s, 1, 1) & " " & Mid(s, 2, 1)
    
End Sub

文字列の n 文字目と n + 1 文字目 (paizaランク D 相当)

文字列 s が入力されるので、n 文字目と n + 1 文字目を出力してください。 n + 1 文字目がない場合は何も出力しないでください。

n
s

期待する出力

n 文字目と n + 1 文字目を半角スペース区切りで出力してください。
最後は改行し、余計な文字、空行を含んではいけません。


すべてのテストケースにおいて、以下の条件をみたします。

1 ≦ (文字列 s の長さ) ≦ 10,000
1 ≦ n ≦ 10,000
文字列sは、半角アルファベットで構成された文字列


入力例

2
read

出力例

e a

n + 1 文字目がない場合は何も出力しない、というのがポイントになりそう。

Python
n = int(input())
s = input()
if len(s) > n:
    print(s[n-1],s[n])
VBA
Sub count_string_4()

    N = Cells(1, 1)
    s = Cells(2, 1)
    If N < Len(s) Then
        Debug.Print Mid(s, N, 1) & " " & Mid(s, N + 1, 1)
    End If
    
End Sub

文字列の重複カウント (paizaランク C 相当)

1行目で文字列 s、2行目で文字列 t が入力されます。
s が t の中で何回出現するかカウントして出力してください。

s
t

期待する出力

出現回数を1行で出力してください。
最後は改行し、余計な文字、空行を含んではいけません。


すべてのテストケースにおいて、以下の条件をみたします。

1 ≦ (文字列 s の長さ) ≦ 10,000
1 ≦ (文字列 t の長さ) ≦ 10,000
文字列 s, t は、半角アルファベットで構成された文字列


入力例

AA
abdeeAAbAAAbfde

出力例

3

入力例、出力例から、重複していてもカウントするというのが分かる。まぁ、この問題のタイトルが「文字列の重複カウント」なわけだが。

Python
s = input()
t = input()
len_s = len(s)
len_t = len(t)
ans = 0
for i in range(0,len_t-len_s+1):
    p = t[i:i+len_s]
    if s == p:
        ans += 1
print(ans)
VBA
Sub count_string_9()

    s = Cells(1, 1)
    t = Cells(2, 1)
    lenS = Len(s)
    lenT = Len(t)
    
    ans = 0
    For i = 1 To lenT - lenS + 1
        p = Mid(t, i, lenS)
        
        If s = p Then
            ans = ans + 1
        End If
    Next
    
    Debug.Print ans
    
End Sub

最後に

配列内の重複したブロック単位で処理を行うパターンは結構ある気がする。for 文の範囲の作り方がポイントになるのか。これも結局は慣れでしょうか。

2 問目にあるような、n + 1 文字目がない場合は何もしない処理であったり、3 問目にあるような検索する文字がそのままだと文字列を超えてしまうパターンであったり、ちゃんと現在どの場所を検査しているのか把握できていなければエラーになる。把握する手段は自分で確立しておく必要があると思う。

引き続き、よろしくお願いいたします!

Pythonpaiza,学習,Python

Posted by LeoSaki