私は繰り返し文字を含まない文字列の最長部分文字列を見つけるという年齢の古い質問(バージョンが多数あります)を試しています。私の試みが正常に動作しない理由を私はうまくいかないことができます。私の出力が第二「W」になると文字列pythonで最も長い一意の部分文字列を見つけよう
def findLongest(inputStr):
resultSet = []
substr = []
for c in inputStr:
print ("c: ", c)
if substr == []:
substr.append([c])
continue
print(substr)
for str in substr:
print ("c: ",c," - str: ",str,"\n")
if c in str:
resultSet.append(str)
substr.remove(str)
else:
str.append(c)
substr.append([c])
print("Result set:")
print(resultSet)
return max(resultSet, key=len)
print (findLongest("pwwkewambb"))
、それはすべてのsubstr要素を反復しません。私は何か愚かなことをしたと思うが、私はそれが何であるかを見ることができないので、いくつかの指導は認められるだろう!私は答えに自分自身をキックするつもりのように私は私の出力の先頭
...感じる:
EDIT:
私はのためのループを置き換えます
for idx, str in enumerate(substr):
print ("c: ",c," - str: ",str,"\n")
if c in str:
resultSet.append(str)
substr[idx] = []
else:
str.append(c)
正しい結果が得られます。唯一のことは、空の要素配列が次の文字で設定されることです。それは少し意味がないようです。より良い方法が必要です。
私の期待される出力はkewambです。
それを反復しながら、あなたはリストから要素を削除している
for str in substr:
print ("c: ",c," - str: ",str,"\n")
if c in str:
resultSet.append(str)
substr.remove(str)
:あなたの試みで、間違っているが、それは、複雑だと何
c: p
c: w
[['p']]
c: w - str: ['p']
c: w
[['p', 'w'], ['w']]
c: w - str: ['p', 'w']
c: w - str: ['w']
c: k
[[], [], ['w']]
c: k - str: []
c: k - str: []
c: k - str: ['w']
c: e
[['k'], ['k'], ['w', 'k'], ['k']]
c: e - str: ['k']
c: e - str: ['k']
c: e - str: ['w', 'k']
c: e - str: ['k']
...
'substr.remove(文字列)'::
max
とlen
はかなり自明です、groupby
変更可能なグローバルな構造のビジネスのない別のバージョンによって生成最長のリストを取得することをやって反復は悪いです –
ああ本当ですか?それを知らなかった。私は前にstr = []を使ってみましたが、それはうまくいかなかったので、削除を使用して始めました – dgBP
私はこれを間違った方法で考えています - より直感的な解決策がありますか? – dgBP