回答編集履歴

2

修正取り下げ

2021/12/11 02:50

投稿

actorbug
actorbug

スコア2226

test CHANGED
@@ -64,7 +64,7 @@
64
64
 
65
65
  もう少しだけ高速化してみましたが、ここまでやらなくてはいけない時点で何かおかしい気はします。
66
66
 
67
- - リストを事前確保して`append`をやめる
67
+ - ~~リストを事前確保して`append`をやめる~~ (プロファイラを外したらほとんど効果がなかったので取り下げます)
68
68
 
69
69
  - `if length == k:`の判定を、`length`が増えた時だけにする
70
70
 
@@ -78,7 +78,7 @@
78
78
 
79
79
  length = 0
80
80
 
81
- li = [0] * k
81
+ li = []
82
82
 
83
83
  for i in range(97, 97 + 26):
84
84
 
@@ -88,7 +88,7 @@
88
88
 
89
89
  if s[j] == c:
90
90
 
91
- li[length] = j
91
+ li.append(j)
92
92
 
93
93
  length += 1
94
94
 

1

修正ソース提示

2021/12/11 02:50

投稿

actorbug
actorbug

スコア2226

test CHANGED
@@ -53,3 +53,71 @@
53
53
 
54
54
 
55
55
  これを見れば、`chr`があやしいと分かるでしょう。
56
+
57
+
58
+
59
+ # 追記
60
+
61
+
62
+
63
+ こちらの環境だと、`chr`の修正だけで1秒強にまで縮んだのですが、不十分でしたか。
64
+
65
+ もう少しだけ高速化してみましたが、ここまでやらなくてはいけない時点で何かおかしい気はします。
66
+
67
+ - リストを事前確保して`append`をやめる
68
+
69
+ - `if length == k:`の判定を、`length`が増えた時だけにする
70
+
71
+ ```python
72
+
73
+ n, k = map(int, input().split())
74
+
75
+ s = list(str(input()))
76
+
77
+
78
+
79
+ length = 0
80
+
81
+ li = [0] * k
82
+
83
+ for i in range(97, 97 + 26):
84
+
85
+ c = chr(i)
86
+
87
+ for j in range(n):
88
+
89
+ if s[j] == c:
90
+
91
+ li[length] = j
92
+
93
+ length += 1
94
+
95
+ if length == k:
96
+
97
+ break
98
+
99
+ else:
100
+
101
+ continue
102
+
103
+ break
104
+
105
+
106
+
107
+ li = set(li)
108
+
109
+
110
+
111
+ ans = ''
112
+
113
+ for i in range(n):
114
+
115
+ if i not in li:
116
+
117
+ ans += s[i]
118
+
119
+
120
+
121
+ print(ans)
122
+
123
+ ```