找到两个具有一个最小子字符串的子字符串的 C++ 代码


假设我们有一个包含 n 个字符的小写字符串 S。我们需要找到两个非空子字符串 P 和 Q,使得 −

  • P 和 Q 都是 S 的子序列

  • 对于每个索引 i,S[i] 只属于 P 或 Q 中的一个。

  • P 是可能的最小词典序。

因此,如果输入类似于 S = "thelightsaber",则输出将为 10,因为我们需要 2 个红色笔记本、3 个绿色笔记本和 5 个蓝色笔记本。

步骤

为解决这个问题,我们将按照以下步骤进行 −

c := S
sort the array c
a := position of (c[0]) in S
delete c from S
print c[0] and S

示例

我们来了解以下实现以获取更好的理解 −

#include <bits/stdc++.h>
using namespace std;
void solve(string S){
   string c = S;
   sort(c.begin(), c.end());
   int a = S.find(c[0]);
   S.erase(S.begin() + a);
   cout << c[0] << ", " << S << endl;
}
int main(){
   string S = "thelightsaber";
   solve(S);
}

输入

"thelightsaber"

输出

a, thelightsber

更新于: 15-Mar-2022

116 浏览

开启你的职业生涯

完成课程后获得认证

开始
广告