0
0

More than 3 years have passed since last update.

AtCoder Beginner Contest 167 A問題「Registration」解説(Python3,C++,Java)

Last updated at Posted at 2020-08-11

AtCoder Beginner Contest 167 A問題「Registration」の解説を行います。

問題URL:
https://atcoder.jp/contests/abc167/tasks/abc167_a

問題概要

文字列$S$,$T$が与えられる。
$T$が$S$の末尾に1文字追加した文字列であるか判定せよ。

$T$が条件を満たすならばYes
条件を満たさなければNoと出力せよ。

制約

・$S,T$は英小文字列
・$1 \leq |S| \leq 10$
・$|T| = |S| + 1$

解説

文字列$T$について、$|S|$文字目までのスライスを取得し、それが$S$と等しいかどうかを判定すればよいです。
ここで、スライスとは、文字列の一部のことを指します。

スライスの取得方法

Python3では T[i:j+1]で$T$の$i$文字目から$j$文字目までのスライスを取得することができます。
(ここで、0-indexであることに注意して下さい)

[コラム]0-index,1-indexとは?

コンピューター上では、数字のカウンタは1ではなく0から始めます。ですので、私たちが処理する文字列は、私たちにとっては1文字目から数えますが、コンピューターにとっては0文字目なのです。
コンピューター的な配列(文字列含む)の数え方を0-indexといいます。
それに対して、私たちが普段している配列の数え方を1-indexといいます。
今後も解説でよく使用する言葉ですので覚えておきましょう。

本題に戻ります。
C++では、T.substr(i,j)で$T$の$i$番目から$j$文字分のスライスを取得することが出来ます。(iは0-indexです)
Javaでは、T.substring(i,j+1)で$T$の$i$番目から$j$番目までのスライスを取得することができます。(i,jは0-indexです)

これらの関数を用いて$T$のスライスを取得し、$S$と同じかどうか判定すれば良いでしょう。

以下、Python3,C++,Javaでの解答例を示します。

各言語解答例

Python3での解答例
ABC167A.py
S = input()
T = input()
if T[0:len(S)] == S:
  print("Yes")
else:
  print("No")

C++での解答例
ABC167A.cpp
#include<bits/stdc++.h>
using namespace std;
int main(){
  string S,T;
  cin >> S >> T;
  string Judge = T.substr(0,S.size());
  if (Judge == S){
    cout << "Yes" << endl;
  }else{
    cout << "No" << endl;
  }
}

Javaでの解答例
ABC167A.java
import java.util.Scanner;
public class Main{
  public static void main(String[] args){
    Scanner scan = new Scanner(System.in);
    String S = scan.nextLine();
    String T = scan.nextLine();
    String judge = T.substring(0,S.length());
    if (judge == S){
      System.out.println("Yes");
    }else{
      System.out.println("No");
    }
  }
}

実は、このコードを実行すると、WAになります。(分かる方は)理由は分かりますか?

理由を知りたい方は調べてみて下さい。

正解コードは以下の通りです。

ABC167A_AC.java
import java.util.Scanner;
public class Main{
  public static void main(String[] args){
    Scanner scan = new Scanner(System.in);
    String S = scan.next();
    String T = scan.next();
    String judge = T.substring(0,S.length());
    if (S.equals(judge)){
      System.out.println("Yes");
    }else{
      System.out.println("No");
    }
  }
}

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0