编写一个c ++程序,在用户输入10个结果后输出最长的连胜

时间:2017-09-17 22:28:51

标签: algorithm

这是一个在练习测试中给我们的问题,我一直试图解决它,但没有取得任何进展。我应该写一个程序,读取10个字符,每个字符为w或l,用于输赢。该计划应该计算最长的连胜纪录。例如: “l w w w w w w l”将给出4的输出。“我将会输出1”。我一直在弄乱这个问题,但我不知道该去哪里。另请注意,除了基本的if / else之外,我们还没有涵盖任何内容,而/ do while,for循环,switch语句。这不是分数的分配,只是练习测试中的一个问题。

1 个答案:

答案 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;
}

希望这有帮助!如果我犯了任何错误或者我的方法需要更多解释,请告诉我。