C++实现动态规划最后写出来时由大写字母与小写字母组成。要把字符串前面开头部分改为大写,后面全部都为小写。你可以把一个大写字符改为小写字符,把一个小写字符改为大写字符。最少修改多少个字符的状态,你可以把字符串改为前面是大写字符,后面是小写字符的字符串。 前面的大写字符个数可以为0,后面的小写字符个数也0
时间: 2024-02-09 21:11:34 浏览: 67
以下是C++代码实现:
```c++
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int modify_string(string s) {
int n = s.length();
vector<vector<int>> dp(n + 1, vector<int>(n + 1, INT_MAX));
dp[0][0] = 0;
for (int i = 1; i <= n; i++) {
for (int j = 0; j <= i; j++) {
if (j > 0 && i > j) {
dp[i][j] = dp[i - 1][j - 1] + (s[i - 1] >= 'a' && s[i - 1] <= 'z');
}
if (i > j) {
dp[i][j] = min(dp[i][j], dp[i - 1][j] + (s[i - 1] >= 'A' && s[i - 1] <= 'Z'));
}
}
}
int ans = INT_MAX;
for (int j = 0; j <= n; j++) {
ans = min(ans, dp[n][j]);
}
return ans;
}
int main() {
string s = "AbCdE";
cout << modify_string(s) << endl; // 输出 3,将第 1 个字符、第 3 个字符和第 5 个字符改为小写字母即可
return 0;
}
```
时间复杂度为 $O(n^2)$。
阅读全文