数字の文字列が与えられた場合、任意の回文のアナグラムであるサブワード(一貫したサブシーケンス)の数を数えます。 Pythonでアナグラムがパリンドロームである部分文字列の番号
私の試み:
For example, given:
S = "02002"
the function should return 11.
these are 11 substrings whose anagrams are palindrome
"0", "2", "0", "0", "2", "00", "020", "200", "002", "2002", "02002"
それは時間制限を与えている
def ispalin(s):
if len(s)%2==0:
for i in s:
if s.count(i)%2!=0:
return False
else:
sum =0
for i in set(s):
if s.count(i)%2==1:
sum = sum+1
if sum == 1:
return True
else:
return False
return True
def solution(S):
# write your code in Python 3.6
count=len(S)
for i in range(len(S)):
for j in range(i+1,len(S)):
if ispalin(S[i:j+1]):
count=count+1
return count
のI/O形式は、大きな文字列を超えました。どのように私は上記のコードを最適化できますか?私は賭け
があり、ここでこれよりもよりよい解決策が存在する証拠 [画像] [1]
https://i.stack.imgur.com/7x3Jq.png
's.count(i)'より良い速度のために 'collections.Counter'を使用します。いくつかのテスト入力と出力を追加できますか? –
@ Jean-FrançoisFabreはテストケースを更新しましたが、その複雑さは、o(n)3です。時間の複雑さを減らす必要があります。 –
@OmG解決策は存在しますが、確かに分かりません –