Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 9bd71d0

Browse files
committed
feat: add solutions to lc problem: No.2911
No.2911.Minimum Changes to Make K Semi-palindromes
1 parent 11f9d06 commit 9bd71d0

File tree

8 files changed

+582
-7
lines changed

8 files changed

+582
-7
lines changed

‎solution/2600-2699/2698.Find the Punishment Number of an Integer/README.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@
6060

6161
枚举结束,返回答案即可。
6262

63-
时间复杂度 $O(n \times \log^2 n),ドル空间复杂度 $O(\log n)$。其中 $n$ 为给定的正整数。
63+
时间复杂度 $O(n^{1 + 2 \log_{10}^2}),ドル空间复杂度 $O(\log n)$。其中 $n$ 为给定的正整数。
6464

6565
<!-- tabs:start -->
6666

‎solution/2900-2999/2911.Minimum Changes to Make K Semi-palindromes/README.md‎

Lines changed: 195 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,27 +66,219 @@
6666
<!-- 这里可写当前语言的特殊实现逻辑 -->
6767

6868
```python
69-
69+
class Solution:
70+
def minimumChanges(self, s: str, k: int) -> int:
71+
n = len(s)
72+
g = [[inf] * (n + 1) for _ in range(n + 1)]
73+
for i in range(1, n + 1):
74+
for j in range(i, n + 1):
75+
m = j - i + 1
76+
for d in range(1, m):
77+
if m % d == 0:
78+
cnt = 0
79+
for l in range(m):
80+
r = (m // d - 1 - l // d) * d + l % d
81+
if l >= r:
82+
break
83+
if s[i - 1 + l] != s[i - 1 + r]:
84+
cnt += 1
85+
g[i][j] = min(g[i][j], cnt)
86+
87+
f = [[inf] * (k + 1) for _ in range(n + 1)]
88+
f[0][0] = 0
89+
for i in range(1, n + 1):
90+
for j in range(1, k + 1):
91+
for h in range(i - 1):
92+
f[i][j] = min(f[i][j], f[h][j - 1] + g[h + 1][i])
93+
return f[n][k]
7094
```
7195

7296
### **Java**
7397

7498
<!-- 这里可写当前语言的特殊实现逻辑 -->
7599

76100
```java
77-
101+
class Solution {
102+
public int minimumChanges(String s, int k) {
103+
int n = s.length();
104+
int[][] g = new int[n + 1][n + 1];
105+
int[][] f = new int[n + 1][k + 1];
106+
final int inf = 1 << 30;
107+
for (int i = 0; i <= n; ++i) {
108+
Arrays.fill(g[i], inf);
109+
Arrays.fill(f[i], inf);
110+
}
111+
for (int i = 1; i <= n; ++i) {
112+
for (int j = i; j <= n; ++j) {
113+
int m = j - i + 1;
114+
for (int d = 1; d < m; ++d) {
115+
if (m % d == 0) {
116+
int cnt = 0;
117+
for (int l = 0; l < m; ++l) {
118+
int r = (m / d - 1 - l / d) * d + l % d;
119+
if (l >= r) {
120+
break;
121+
}
122+
if (s.charAt(i - 1 + l) != s.charAt(i - 1 + r)) {
123+
++cnt;
124+
}
125+
}
126+
g[i][j] = Math.min(g[i][j], cnt);
127+
}
128+
}
129+
}
130+
}
131+
f[0][0] = 0;
132+
for (int i = 1; i <= n; ++i) {
133+
for (int j = 1; j <= k; ++j) {
134+
for (int h = 0; h < i - 1; ++h) {
135+
f[i][j] = Math.min(f[i][j], f[h][j - 1] + g[h + 1][i]);
136+
}
137+
}
138+
}
139+
return f[n][k];
140+
}
141+
}
78142
```
79143

80144
### **C++**
81145

82146
```cpp
83-
147+
class Solution {
148+
public:
149+
int minimumChanges(string s, int k) {
150+
int n = s.size();
151+
int g[n + 1][n + 1];
152+
int f[n + 1][k + 1];
153+
memset(g, 0x3f, sizeof(g));
154+
memset(f, 0x3f, sizeof(f));
155+
f[0][0] = 0;
156+
for (int i = 1; i <= n; ++i) {
157+
for (int j = i; j <= n; ++j) {
158+
int m = j - i + 1;
159+
for (int d = 1; d < m; ++d) {
160+
if (m % d == 0) {
161+
int cnt = 0;
162+
for (int l = 0; l < m; ++l) {
163+
int r = (m / d - 1 - l / d) * d + l % d;
164+
if (l >= r) {
165+
break;
166+
}
167+
if (s[i - 1 + l] != s[i - 1 + r]) {
168+
++cnt;
169+
}
170+
}
171+
g[i][j] = min(g[i][j], cnt);
172+
}
173+
}
174+
}
175+
}
176+
for (int i = 1; i <= n; ++i) {
177+
for (int j = 1; j <= k; ++j) {
178+
for (int h = 0; h < i - 1; ++h) {
179+
f[i][j] = min(f[i][j], f[h][j - 1] + g[h + 1][i]);
180+
}
181+
}
182+
}
183+
return f[n][k];
184+
}
185+
};
84186
```
85187
86188
### **Go**
87189
88190
```go
191+
func minimumChanges(s string, k int) int {
192+
n := len(s)
193+
g := make([][]int, n+1)
194+
f := make([][]int, n+1)
195+
const inf int = 1 << 30
196+
for i := range g {
197+
g[i] = make([]int, n+1)
198+
f[i] = make([]int, k+1)
199+
for j := range g[i] {
200+
g[i][j] = inf
201+
}
202+
for j := range f[i] {
203+
f[i][j] = inf
204+
}
205+
}
206+
f[0][0] = 0
207+
for i := 1; i <= n; i++ {
208+
for j := i; j <= n; j++ {
209+
m := j - i + 1
210+
for d := 1; d < m; d++ {
211+
if m%d == 0 {
212+
cnt := 0
213+
for l := 0; l < m; l++ {
214+
r := (m/d-1-l/d)*d + l%d
215+
if l >= r {
216+
break
217+
}
218+
if s[i-1+l] != s[i-1+r] {
219+
cnt++
220+
}
221+
}
222+
g[i][j] = min(g[i][j], cnt)
223+
}
224+
}
225+
}
226+
}
227+
for i := 1; i <= n; i++ {
228+
for j := 1; j <= k; j++ {
229+
for h := 0; h < i-1; h++ {
230+
f[i][j] = min(f[i][j], f[h][j-1]+g[h+1][i])
231+
}
232+
}
233+
}
234+
return f[n][k]
235+
}
236+
237+
func min(a, b int) int {
238+
if a < b {
239+
return a
240+
}
241+
return b
242+
}
243+
```
89244

245+
### **TypeScript**
246+
247+
```ts
248+
function minimumChanges(s: string, k: number): number {
249+
const n = s.length;
250+
const g = Array.from({ length: n + 1 }, () => Array.from({ length: n + 1 }, () => Infinity));
251+
const f = Array.from({ length: n + 1 }, () => Array.from({ length: k + 1 }, () => Infinity));
252+
f[0][0] = 0;
253+
for (let i = 1; i <= n; ++i) {
254+
for (let j = 1; j <= n; ++j) {
255+
const m = j - i + 1;
256+
for (let d = 1; d < m; ++d) {
257+
if (m % d === 0) {
258+
let cnt = 0;
259+
for (let l = 0; l < m; ++l) {
260+
const r = (((m / d) | 0) - 1 - ((l / d) | 0)) * d + (l % d);
261+
if (l >= r) {
262+
break;
263+
}
264+
if (s[i - 1 + l] !== s[i - 1 + r]) {
265+
++cnt;
266+
}
267+
}
268+
g[i][j] = Math.min(g[i][j], cnt);
269+
}
270+
}
271+
}
272+
}
273+
for (let i = 1; i <= n; ++i) {
274+
for (let j = 1; j <= k; ++j) {
275+
for (let h = 0; h < i - 1; ++h) {
276+
f[i][j] = Math.min(f[i][j], f[h][j - 1] + g[h + 1][i]);
277+
}
278+
}
279+
}
280+
return f[n][k];
281+
}
90282
```
91283

92284
### **...**

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /