AtCoder Beginner Contest 167 A Problem "Registration" Explanation (Python3, C ++, Java)

AtCoder Beginner Contest 167 A I will explain the problem "Registration".

Problem URL: https://atcoder.jp/contests/abc167/tasks/abc167_a

Problem summary

Given the strings $ S $, $ T $. Determine if $ T $ is a string with one character added to the end of $ S $.

Yes if $ T $ meets the conditions If the conditions are not met, output No.

Constraint

・ $ S and T $ are lowercase letters ・1 \leq |S| \leq 10|T| = |S| + 1

Commentary

StringTabout,|S|Up to the lettersliceAnd it isSYou just have to determine if it is equal to. Here, slice </ b> refers to a part of a character string.

How to get slices

In Python3, you can use T [i: j + 1] to get the slice </ b> from the $ i $ character to the $ j $ character of $ T $. (note that it is 0-index here) </ font>

[Column] What are 0-index and 1-index? </ font>

On computers, numeric counters start at 0 instead of 1. So, the strings we process are counted from the first character for us, but the 0th character for computers. </ b> The method of counting computer-like arrays (including character strings) is called 0-index </ b>. On the other hand, the way we usually count arrays is called 1-index </ b>. Keep in mind that it will be used frequently in the explanations in the future.

Let's get back to the main subject. In C ++, you can use T.substr (i, j) to get slices </ b> of $ j $ characters from the $ i $ th of $ T $. (i is 0-index) In Java, you can get slices </ b> from $ i $ th to $ j $ th of $ T $ with T.substring (i, j + 1). (i, j are 0-index)

You can use these functions to get a slice of $ T $ and determine if it is the same as $ S $.

Below are examples of solutions in Python3, C ++, and Java.

Example of answer for each language

Example solution in Python3

{ABC167A.py}


S = input()
T = input()
if T[0:len(S)] == S:
  print("Yes")
else:
  print("No")
Example solution in 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 answer example

{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");
    }
  }
}

In fact, when I run this code, I get WA </ font>. Do you know why (if you know)?

If you want to know the reason, please check it out.

The correct code is as follows.

{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");
    }
  }
}

Recommended Posts