算法题每日一练---第27天:不同子串

简介: 一个字符串的非空子串是指字符串中长度至少为 1 的连续的一段字符组成的串。

一、问题描述


一个字符串的非空子串是指字符串中长度至少为 1 的连续的一段字符组成的串。例如,字符串 aaab 有非空子串 a, b, aa, ab, aaa, aab, aaab一共 7 个。


注意在计算时,只算本质不同的串的个数。

请问,字符串 0100110001010001有多少个不同的非空子串?


二、题目要求


考察

模板库set的熟练使用
建议用时15~25min


三、问题分析


这一题主要是对字符串的应用,难度中等。

步骤

第一步,要将字符串分割成一个个子串。第二步,再判断是否是独一无二的一个字串。

这两步,每一步都可以通过C++STL免费提供的函数实现,完全解放双手。


1.分割子串

string库中提供:s.substr(pos,len),其中pos代表输出字符的下标,len代表长度。


2.独一无二

set是一个标准模板库,如果你放进去两个一模一样的物体,他就会吃掉一个,放进去n个,吃掉n-1,只留下一个。

解题前,先别急着看编码,看一下总结与提高部分了解set用法之后,自己上手写一下。


四、编码实现


#include <iostream>#include<set>//set头文件#include<string>//string头文件usingnamespacestd;
intmain()
{
inti,j;
set<string>s;
stringt="0100110001010001";//初始化定义for(i=0;i<t.size();i++)//第一层循环    {
for(j=0;j<t.size()-i;j++)//第二层循环        {
s.insert(t.substr(i,j+1));//将字符串的子串插入到set中//          cout<<t.substr(i,j+1)<<"\n";        }
    }
cout<<s.size();//输出元素个数return0;
}

五、输出结果

输出结果为:100



六、总结与提高


在C++中,C++ 标准库提供了 set 类类型,支持上述所有的操作,另外还增加了其他更多的功能, 编程时加入头文件:

#include<set>//或者万能头文件#include<bits/stdc++.h>usingnamespacestd;


Set函数:

用set定义s类(定义什么都可以,只要把s变成定义的字母就可以调用C++中的函数),具体使用方法为:

函数 用法
常见操作
s.insert(x) 将元素x插入s之中
s.erase(x) 将元素x从s中删除,删除成功返回1,失败返回0,失败就是没有这个元素
s.find(x) 查找字符串中的元素x
s.size() 输出当前存储元素个数
s.clear() 清空当前所有元素
s.begin() 开始值
s.end() 结尾值


相关文章
|
2月前
|
算法
【算法】滑动窗口——最小覆盖子串
【算法】滑动窗口——最小覆盖子串
|
6天前
|
算法 Java 程序员
【算法每日一练及解题思路】有n级台阶,一次只能上1级或2级,共有多少种走法?
本文深入解析了“爬楼梯问题”,探讨了递归与迭代两种解法,并提供了Java代码实现。通过分析问题本质,帮助读者理解动态规划技巧,提高解决实际编程问题的能力。关键词:Java, 算法, 动态规划, 爬楼梯问题, 递归, 迭代。
17 0
|
2月前
|
算法 容器
【算法】滑动窗口——串联所有单词的子串
【算法】滑动窗口——串联所有单词的子串
|
4月前
|
机器学习/深度学习 算法 测试技术
【算法优选】 动态规划之子数组、子串系列——壹
【算法优选】 动态规划之子数组、子串系列——壹
|
4月前
|
算法
【经典LeetCode算法题目专栏分类】【第8期】滑动窗口:最小覆盖子串、字符串排列、找所有字母异位词、 最长无重复子串
【经典LeetCode算法题目专栏分类】【第8期】滑动窗口:最小覆盖子串、字符串排列、找所有字母异位词、 最长无重复子串
|
4月前
|
人工智能 算法
【算法优选】 动态规划之子数组、子串系列——贰
【算法优选】 动态规划之子数组、子串系列——贰
|
5月前
|
人工智能 算法 测试技术
【字符串】【C++算法】828.统计子串中的唯一字符
【字符串】【C++算法】828.统计子串中的唯一字符
|
5月前
|
设计模式 算法 Java
【数据结构和算法】定长子串中元音的最大数目
这是力扣的 1456 题,难度为中等,解题方案有很多种,本文讲解我认为最奇妙的一种。又是一道滑动窗口的典型例题,可以帮助我们巩固滑动窗口算法。给你字符串s和整数k。 请返回字符串s中长度为k的单个子字符串中可能包含的最大元音字母数。 英文中的元音字母为(a,e,i,o,u)。
78 1
|
5月前
|
存储 算法 程序员
【算法训练-字符串 一】【子串问题】最长无重复子串、最长回文子串、最长公共前缀
【算法训练-字符串 一】【子串问题】最长无重复子串、最长回文子串、最长公共前缀
65 0
|
12月前
|
算法 索引
【算法专题突破】滑动窗口 - 串联所有单词的子串(15)
【算法专题突破】滑动窗口 - 串联所有单词的子串(15)
36 0