栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

ccf:201409-03 字符串匹配 (技巧总结 + 满分题解 + 解题思路)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

ccf:201409-03 字符串匹配 (技巧总结 + 满分题解 + 解题思路)

技巧总结

本题主要考察字符串的相关操作

//字符串的查找
//1. 方法一:find()函数————时间复杂度为两个字符串长度乘积
string a = "abcde";
string b = "ab";
cout << a.find(b) //输出零,字串的第一个下标位置

//2. 方法二:strstr()函数————时间复杂度为线性时间复杂度,和kmp时间复杂度差不多
char father[N];
char son[N];

cin >> father;
cin >> son;
char * res = strstr(father, son); //在老爹里找儿子

if(res == NULL) //找不到返回null
	printf("不能找到");
else //若是找到,则返回字串在主串中第一次出现的位置及以后的字符串;strstr(abcdef, bc)结果尾bcdef
	printf("%s", res);

//字符串大小写转换
//使用transform函数
#include 
string a;
transform(a.begin(), a.end(),a.begin(),::tolower); //toupper是将字符变为大写

题目描述


解题思路

数据范围不大,利用find函数寻找时间复杂度n*2,不会超时大小写敏感则直接find,大小写不敏感则将字串和查询串统一为大写或小写后再find查找子串是否存在
代码实现

#include 
#include 
#include 

using namespace std;

string s;
bool flag;
int n;

//strstr和kmp效率差不多,0(n);
int main()
{
    cin >> s;
    cin >> flag;
    cin >> n;
    
    if (!flag) 
    {
        transform(s.begin(),s.end(),s.begin(),::tolower);
    }
    while (n --)
    {
        string a;
        string res;
        cin >> a;
        res = a;
        if (!flag) transform(a.begin(), a.end(), a.begin(), ::tolower);
        if(a.find(s) != -1) //find是区分大小写的,若找到则返回字串首字母下标位置,时间复杂度0(n * m)
        {
            cout << res << endl;
        }
        
    }
    return 0;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/722371.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号