题目描述 给定一个 01 字符串 ss,你可以任选 ss 的一个非空子串,把这个子串在 ss 中只可以翻转一次。输入格式 输入只有一行一个字符串,表示 ss。 输出格式 输出一行一个字符串,表示得到的字典序最小的字符串。c++代码
时间: 2024-04-16 14:23:46 浏览: 151
抱歉,之前的回答有误。下面是修正后的 C++ 代码,用于解决这个问题:
```cpp
#include <iostream>
#include <string>
using namespace std;
string getSmallestString(string s) {
int n = s.length();
int start = -1, end = -1;
// 找到第一个01的子串
for (int i = 0; i < n - 1; i++) {
if (s[i] == '0' && s[i+1] == '1') {
start = i;
end = i + 1;
break;
}
}
if (start == -1) {
// 如果没有01子串,直接返回原字符串
return s;
}
// 将start到end之间的子串翻转
while (start >= 0 && end < n && s[start] == '0' && s[end] == '1') {
s[start] = '1';
s[end] = '0';
start--;
end++;
}
return s;
}
int main() {
string s;
cin >> s;
string result = getSmallestString(s);
cout << result << endl;
return 0;
}
```
这段代码会读取一个01字符串,并返回得到的字典序最小的字符串。它会找到第一个01的子串,然后将该子串翻转。如果没有01子串,则直接返回原字符串。希望能对你有帮助!
阅读全文