已知字符串比较大小的规则:
a < ab;
a < b;
aba < ad;
给定字符串“dbdca”,请找出其最大的字符子串。
分析:对于字符串"dbdca",其子串可以是db, bdc, dca, ddc,要求最大的字符子串:
- 首先需要找到最大的字符,记录该字符串的位置;
- 从该位置之后的字符中找到最大的字符,加到步骤1中所求字符的后面;
- 重复步骤2,直到遍历至字符串的尾部。
这样的思路,是较为简单的。
int findMax(string str, int currPos) {
int maxPos = currPos;
char maxStr = str[currPos];
for (int i = currPos; i < str.size(); i++) {
if (str[i] > maxStr) {
maxPos = i;
maxStr = str[i];
}
}
return maxPos;
}
int main() {
string str = "dbdca";
int currPos = 0;
string maxStr = "";
while (currPos < str.size()) {
int currMax = findMax(str, currPos);
string ss(1, str[currMax]);
maxStr += ss;
currPos = currMax + 1;
}
cout << maxStr << endl;
return 0;
}
emmm,原来就想复杂了,使用deque依次存下来大小单调递减的字符组成的字符串,再把它和之前存下来的maxStr进行比较…就很复杂,好,现在get啦!