Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで文字列の前半と後半が「似ている」かどうかを判定するプログラム

長さが偶数である文字列 s が与えられたとします。この文字列を同じ長さの前半と後半に分割し、前半を a、後半を b と呼びます。

2つの文字列が「似ている(alike)」とは、大文字・小文字を問わず、含まれる母音(a, e, i, o, u)の数が一致していることを指します。この条件をもとに、ab が似ているかどうかを判定するのが本記事の目的です。

問題の例

たとえば入力が s = "talent" の場合、出力は True になります。これは、文字列を分割すると前半が "tal"、後半が "ent" となり、どちらも母音が1つ・子音が2つで構成されているためです。

解決のアプローチ

この問題は、次の手順で解くことができます。

  • a に文字列 s の前半を代入する

  • b に文字列 s の後半を代入する

  • カウンタ count1count2 を 0 で初期化する

  • a 内の各文字 c について、c が母音であれば count1 を 1 増やす

  • b 内の各文字 c について、c が母音であれば count2 を 1 増やす

  • count1count2 が等しければ true を返し、そうでなければ false を返す

Pythonでの実装例

それでは、実際の実装を見てみましょう。

def solve(s):
    vowels = ['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U']

    a = s[:len(s)//2]
    b = s[len(s)//2:]

    count1 = 0
    count2 = 0

    for c in a:
        if c in vowels:
            count1 += 1
    for c in b:
        if c in vowels:
            count2 += 1

    return count1 == count2

s = "talent"
print(solve(s))

入力

"talent"

出力

True

コードのポイント

この実装では、スライス記法 s[:len(s)//2]s[len(s)//2:] を使うことで、文字列を簡単に前半と後半に分割しています。また、母音リストには大文字と小文字の両方を含めているため、大文字小文字が混在する文字列でも正しく判定できます。

計算量は文字列の長さを n とすると O(n) となり、非常に効率的なアルゴリズムです。文字列操作の基礎を学ぶのに適した練習問題といえるでしょう。

  1. 指定された文字列がキーワードであるかどうかを確認するPythonプログラム

    この記事では、指定された文字列がPythonのキーワード(予約語)であるかどうかを判定する方法について解説します。問題の概要与えられた文字列が、Pythonにおけるキーワードであるかどうかを確認する必要があります。キーワードとは、言語によって特別な用途のために予約されている単語であり、変数名や関数名などの識別子として使用することはできません。例えば「if」「for」「while」「def」などはすべてキーワードです。これらの名前を変数に使おうとすると、構文エラーが発生します。解決策:keywordモジュールの活用Pythonには標準ライブラリとしてkeywordモジュールが用意されており、これ

  2. Pythonで文字列がパングラムかどうかを判定するプログラムの作成方法

    本記事では、与えられた文字列がパングラムであるかどうかを判定するPythonプログラムの解法とアプローチについて詳しく解説します。 問題の概要 文字列入力が与えられたとき、その文字列がパングラムであるかどうかを判定するPythonプログラムを作成します。 パングラムとは? パングラムとは、英語のアルファベット26文字すべてを少なくとも1回ずつ含む文章や一連の単語のことです。有名な例として「The quick brown fox jumps over the lazy dog」があります。 解法のアプローチ この問題は、以下の手順で解くことができます。 アルファベット全体を表す基準となる文字列