这是一个在练习测试中给我们的问题,我一直试图解决它,但没有取得任何进展。我应该写一个程序,读取10个字符,每个字符为w或l,用于输赢。该计划应该计算最长的连胜纪录。例如: “l w w w w w w l”将给出4的输出。“我将会输出1”。我一直在弄乱这个问题,但我不知道该去哪里。另请注意,除了基本的if / else之外,我们还没有涵盖任何内容,而/ do while,for循环,switch语句。这不是分数的分配,只是练习测试中的一个问题。
答案 0 :(得分:0)
这个问题可以在O(n)时间复杂度中轻松解决。
所以你只需要保留两个变量,一个叫做max_cnt,另一个是cur_cnt。因此,当您遍历字符串时,如果您发现了一个' w,则递增cur_cnt。否则使cur_cnt = 0.现在在每次迭代结束时,只需使用max_cnt检查cur_cnt的值,如果cur_cnt> gt; max_cnt,然后设置max_cnt = cur_cnt。
看看我对这个问题的实现。代码用c ++编写。
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s = "llwwlwwwwl";
int max_cnt = 0;
int cur_cnt = 0;
for(int i=0; i<s.length(); i++) {
if(s[i]=='l') {
cur_cnt = 0;
} else {
cur_cnt++;
}
max_cnt = max(max_cnt, cur_cnt);
}
cout<<max_cnt<<endl;
return 0;
}
希望这有帮助!如果我犯了任何错误或者我的方法需要更多解释,请告诉我。