2つの文字列の共通文字をアルファベット順に出力するPythonコード
ユーザーから入力された2つの文字列が与えられたとき、両方の文字列に共通して含まれる文字をすべて抽出し、アルファベット順に並べて出力する方法を解説します。Python標準ライブラリの collections.Counter を使えば、わずか数行でこの処理を実装できます。
実行例
入力:
string1: python
string2: program
出力: op
解説
上の例では、「python」と「program」の両方に含まれる文字は「o」と「p」であり、それぞれ1回ずつ出現します。そのため、アルファベット順に並べた結果は「op」となります。
アルゴリズム
この問題は、Counterオブジェクトの集合演算を利用することで効率的に解けます。手順は以下のとおりです。
- まず、2つの文字列を入力として受け取ります。
- 各文字列をCounter(辞書型カウンタ)に変換し、各文字の出現回数を記録します。
- Counterの & 演算子(積集合)を使って、2つのカウンタ間の共通要素を求めます。
- 結果もCounterとなり、キーが共通文字、値が共通する出現頻度になります。
- elements() メソッドを使うと、各キーを出現回数分だけ展開したリストを取得できます。
- sorted() でリストを昇順にソートし、アルファベット順に整列します。
- 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で正しく動作するように修正済みです。
-
【Python入門】エスケープ文字をそのまま出力する方法をわかりやすく解説
この記事では、Pythonでエスケープ文字をそのまま出力(表示)する方法について解説します。エスケープ文字という言葉自体はご存じの方も多いと思いますが、まず初めに、まだ馴染みのない方のためにエスケープ文字の基本からおさらいしておきましょう。エスケープ文字とは?エスケープ文字とは、文字列の中で特別な意味を持つ記号のことです。たとえば、文字列に改行やタブなどを含めたい場合に、これらのエスケープ文字を使用します。まずは、代表的なエスケープ文字である改行コード「\n」を使った例を見てみましょう。例:改行(\n)の出力## 改行コードを含む文字列 new_line_string = Hi\nHow ar
-
Pythonで2つの文字列を結合して1つにまとめる方法:+演算子とjoin()メソッドの使い方
Pythonで文字列を結合する基本:+演算子Pythonで2つの文字列を1つに結合するには、連結演算子「+」を使用します。最もシンプルでよく使われる方法です。以下の例を見てみましょう。str1 = Hello str2 = World str3 = str1 + str2 print(str3)このコードを実行すると、次の出力が得られます。HelloWorldこのように、+演算子を使えば、2つの文字列がそのまま順番に連結され、新しい1つの文字列として生成されます。複数の文字列を結合する:join()メソッド3つ以上の文字列をまとめて結合したい場合や、要素の間に区切り文字を挿入したい場合は、st