题目大意:
F表示女生,M表示男生,每秒如果一个女生前边有一个男生,两个人就可以进行调换位子,问一共需要多少秒,所有的F都在左边,所有的M都在右边。
思路(思路源自:http://blog.youkuaiyun.com/w446506278/article/details/52068170?locationNum=2):
对于一个女生,其肯定要交换的次数为她前边的男生的个数次。
那么如果多个女生连在了一起,其会有延时的可能,那么对应我们统计这个女生前边的男生的个数。初始耗时为0.遇到的女生,如果其前边男生的个数不为0.那么这个女生走到应该到的位子需要的耗时为max(他前边男生的个数,ans+1);
也就是说,如果前边男生的个数比较少的时候,会有延时的情况发生,如果他前边的男生的个数足够多,那么其不会发生延时的情况。
Ac代码:
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
char a[1000060];
int main()
{
while(~scanf("%s",a))
{
int n=strlen(a);
int ans=0;
int contm=0;
for(int i=0;i<n;i++)
{
if(a[i]=='M')contm++;
else
{
if(contm>0)
{
ans=max(ans+1,contm);
}
}
}
printf("%d\n",ans);
}
}