【问题描述】 处理一个只含有0-9和a-z的字符串,使得输出字符串满足: 每个子片段中的字符都是严格升序排列的,按照ascii码顺序即可 下一个子片段必须与前一个子片段相同,或者是其子集 如果输入非法,应该输出 <invalid input string> 【输入形式】 一行字符串 【输出形式】 处理后的字符串 【样例输入】 aabbccdd 007799aabbccddeeff113355zz 1234.89898 abcdefabcdefabcdefaaaaaaaaaaaaaabbbbbbbddddddee 【样例输出】 abcdabcd 013579abcdefz013579abcdefz <invalid input string> abcdefabcdefabcdefabdeabdeabdabdabdabdabaaaaaaa 【样例说明】 这道题并没有用到串,与数组有关 【评分标准】
时间: 2023-12-02 18:02:31 浏览: 29
以下是C++的代码实现:
```c++
#include <iostream>
#include <cstring>
using namespace std;
bool isValid(string s) { // 判断字符串是否合法
for (int i = 0; i < s.size() - 1; i++) {
if (s[i] >= s[i + 1]) {
return false;
}
}
return true;
}
string process(string s) { // 处理字符串
string result = "";
int pre = -1; // 记录前一个子片段的结束位置
for (int i = 0; i < s.size(); i++) {
if (s[i] >= '0' && s[i] <= '9' || s[i] >= 'a' && s[i] <= 'z') {
if (pre == -1 || s.substr(pre, i - pre + 1) <= s.substr(i, 1)) {
result += s[i];
pre = i;
} else {
result += s.substr(pre, i - pre);
}
} else {
return "<invalid input string>";
}
}
return result;
}
int main() {
string s;
cin >> s;
if (isValid(s)) {
cout << process(s) << endl;
} else {
cout << "<invalid input string>" << endl;
}
return 0;
}
```
算法思路:
本题要求处理一个只含有0-9和a-z的字符串,使得输出字符串满足:每个子片段中的字符都是严格升序排列的,下一个子片段必须与前一个子片段相同,或者是其子集。可以遍历输入字符串,对于每个字符进行判断,如果是数字或小写字母,则判断是否符合升序要求和子集要求,如果符合则加入结果字符串中;如果不符合则输出"<invalid input string>"。