一个字符串中的任意一个子序列,若子序列中个字符值均相等,则称为字符平台。写一算法,输入任意一字符串S,输出S中长度最大的字符平台的起始位置及所含字符。(若有多个最长平台长度相同,则输出第一个) 根据主程序写出相应的类定义。 裁判测试程序样例: #include <iostream> #include <string.h> using namespace std; /* 请在这里填写答案 */ int main() { char t[30]; cin>>t; Str test(t); test.process(); test.print(); return 0; } 输入样例: 在这里给出一组输入。例如: 34dadee888saaaa 输出样例: 在这里给出相应的输出。例如: 34dadee888saaaa aaaa 4
时间: 2024-02-14 13:08:50 浏览: 178
Python求两个字符串最长公共子序列代码实例
算法实现:
1. 遍历字符串,记录字符平台的起始位置和长度;
2. 若当前字符与前一个字符相同,则将平台长度加1;
3. 若当前字符与前一个字符不同,则更新记录的平台信息,并重新开始记录。
类定义:
```c++
class Str {
private:
char* str;
int len;
int start;
int max_len;
public:
Str(char* s) {
len = strlen(s);
str = new char[len];
strcpy(str, s);
start = 0;
max_len = 1;
}
void process() {
int curStart = 0;
int curLen = 1;
for (int i = 1; i < len; i++) {
if (str[i] == str[i-1]) {
curLen++;
} else {
if (curLen > max_len) {
max_len = curLen;
start = curStart;
}
curStart = i;
curLen = 1;
}
}
if (curLen > max_len) {
max_len = curLen;
start = curStart;
}
}
void print() {
cout << str << endl;
for (int i = start; i < start + max_len; i++) {
cout << str[i];
}
cout << endl << max_len << endl;
}
~Str() {
delete[] str;
}
};
```
阅读全文