質問: 1 #コンボリセット print("".join(count)) #比較用 print("".join(coword)) #ここで共通の最大数文字列を出力したい ``` ### 実際の入力・出力 出力の1行目はcountのもの、2行目がcowordのものになっています。 入力1 penpineapple nea 出力1 nea ne 入力2 penpineapple iapple 出力2 iapple iap ### 質問 なぜcowordの出力の字数が足りなくなってしまうのでしょうか。 どこを改善すれば、最大の共通文字列を出力できますか? よろしくお願いします。
回答: 解こうとしている問題を私が勘違いしているのかもしれませんが、次の部分が原因と思います。 ``` if s1[s1.index(s) - 1] in count ``` なぜなら s が s1 中に複数あった場合、 s1[s1.index(s) - 1] はいつも同じ場所を指してしまうからです。 プログラムを改造するのではなく、違う発想で作りなおしてみました。 s2 から切り取れる部分文字列のパターンをすべて取り出し、それが s1 中に現れるかを調べています。 一番長い文字列を見つけたいので、部分文字列は長さが長いものから試していき、だんだんに長さを短くするようにしています。 y.rb ``` def find_longest_substr(s1, s2): for length in range(len(s2), 0, -1): for p0 in range(len(s2) - length + 1): substr = s2[p0:(p0 + length)] if substr in s1: return(substr) return "" s1 = input() #一つ目の文字列取得 s2 = input() #二つ目の文字列取得 print(find_longest_substr(s1, s2)) ``` 実行例 ``` $ python3 y.py penpineapple nea nea $ python3 y.py penpineapple iapple apple ``` substr を代入したあとに print(substr) を追加して はしらせてみると、どんな風に substr が変化しているかが わかると思います。