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

2つの文字列の共通文字をアルファベット順に出力するPythonコード

ユーザーから入力された2つの文字列が与えられたとき、両方の文字列に共通して含まれる文字をすべて抽出し、アルファベット順に並べて出力する方法を解説します。Python標準ライブラリの collections.Counter を使えば、わずか数行でこの処理を実装できます。

実行例

入力:
string1: python
string2: program
出力: op

解説

上の例では、「python」と「program」の両方に含まれる文字は「o」と「p」であり、それぞれ1回ずつ出現します。そのため、アルファベット順に並べた結果は「op」となります。

アルゴリズム

この問題は、Counterオブジェクトの集合演算を利用することで効率的に解けます。手順は以下のとおりです。

  1. まず、2つの文字列を入力として受け取ります。
  2. 各文字列をCounter(辞書型カウンタ)に変換し、各文字の出現回数を記録します。
  3. Counterの & 演算子(積集合)を使って、2つのカウンタ間の共通要素を求めます。
  4. 結果もCounterとなり、キーが共通文字、値が共通する出現頻度になります。
  5. elements() メソッドを使うと、各キーを出現回数分だけ展開したリストを取得できます。
  6. sorted() でリストを昇順にソートし、アルファベット順に整列します。
  7. join() で文字を空白なしで連結し、最終的な文字列を生成します。

サンプルコード

from collections import Counter

def common(str1, str2):
    d1 = Counter(str1)
    d2 = Counter(str2)
    cdict = d1 & d2

    if len(cdict) == 0:
        print(-1)
        return

    cchars = list(cdict.elements())
    cchars = sorted(cchars)
    print("Common characters are ::>", ''.join(cchars))

# ドライバープログラム
if __name__ == "__main__":
    s1 = input("Enter first string: ")
    s2 = input("Enter second string: ")
    common(s1, s2)

出力結果

Enter first string: python
Enter second string: program
Common characters are ::> op

なお、共通文字が1つも存在しない場合は -1 を出力するようになっています。また、元のコードに含まれていたPython 2系の構文やインデントの不備は、Python 3で正しく動作するように修正済みです。

  1. 【Python入門】エスケープ文字をそのまま出力する方法をわかりやすく解説

    この記事では、Pythonでエスケープ文字をそのまま出力(表示)する方法について解説します。エスケープ文字という言葉自体はご存じの方も多いと思いますが、まず初めに、まだ馴染みのない方のためにエスケープ文字の基本からおさらいしておきましょう。エスケープ文字とは?エスケープ文字とは、文字列の中で特別な意味を持つ記号のことです。たとえば、文字列に改行やタブなどを含めたい場合に、これらのエスケープ文字を使用します。まずは、代表的なエスケープ文字である改行コード「\n」を使った例を見てみましょう。例:改行(\n)の出力## 改行コードを含む文字列 new_line_string = Hi\nHow ar

  2. Pythonで2つの文字列を結合して1つにまとめる方法:+演算子とjoin()メソッドの使い方

    Pythonで文字列を結合する基本:+演算子Pythonで2つの文字列を1つに結合するには、連結演算子「+」を使用します。最もシンプルでよく使われる方法です。以下の例を見てみましょう。str1 = Hello str2 = World str3 = str1 + str2 print(str3)このコードを実行すると、次の出力が得られます。HelloWorldこのように、+演算子を使えば、2つの文字列がそのまま順番に連結され、新しい1つの文字列として生成されます。複数の文字列を結合する:join()メソッド3つ以上の文字列をまとめて結合したい場合や、要素の間に区切り文字を挿入したい場合は、st