笔记

【问题描述】
小 N 是一个很萌很萌的爱记笔记的好孩子,他又准备在他的笔记本上记下一些文字 了。小 N 希望将这些文字按顺序记在他的笔记本上:假设笔记本的每一页都不限字数,且 他在记下每个字后都可以选择翻到下一页。小 N 有一个奇怪的习惯,笔记本的每一页中都 不能出现重复的字母。小 N 想知道,他最少记多少页笔记,才能按顺序记下全部文字? 【输入】 第一行包含一个仅由小写字母组成的字符串 S,表示小 N 希望记下的文字。
【输出】 一行一个整数,表示小 N 记笔记的最少页数。
【输入输出样例】
note.in
fsfhztctwzj 
 
 
note.out
3
【数据范围】
对于 40%的数据:1 ≤ |S| ≤ 10。
对于 70%的数据:1 ≤ |S| ≤ 501。
对于 100%的数据:1 ≤ |S| ≤ 525010。
 
题解:
 
【读题】
可以抽象为:给定一个字符串,将此串分成尽量少的部分,并使每一部分都没有重复字母。
 
【样例解释】
fs//fhztc//twzj
 
【思路
对一个字符串,从第一个到最后一个枚举,每当有重复字母,ans++,
并memset一下记录数组
 

时间复杂度O(n)

期望得分:100

 
代码:
#include<bits/stdc++.h>
using namespace std;
int ans=1;
string a;
bool flag[155];
int main()
{
    cin>>a;
    int len=a.length();
    for(int i=0;i<len;i++)
    {
        if(flag[a[i]])
        {
            ans++;
            memset(flag,0,sizeof(flag));
        }
        flag[a[i]]=1;
    }
    printf("%d",ans);
    return 0;
} 
/*
fsfhztctwzj
*/

 

 
 
 
posted @ 2019-11-01 18:42  CZD648  阅读(137)  评论(0编辑  收藏  举报
Live2D