首页 > 其他分享 >【11月LeetCode组队打卡】Task2--String & StringMatch

【11月LeetCode组队打卡】Task2--String & StringMatch

时间:2023-11-18 17:13:27浏览次数:36  
标签:11 Task2 string int goal needle 字符串 打卡 size

在CSP里面好多道“水题“基本都离不开字符串/数组的模拟

滚动哈希,字典树,DP几个强强联合基本可以横扫所有难度的字符串算法了,所以在这个task里会好好消化其中前二

字符串和数组有很多相似之处,比如同样使用下标的方式来访问单个字符。根据字符串的特点,将字符串问题分为以下几种:

  • 字符串匹配问题
  • 子串相关问题
  • 前缀 / 后缀相关问题
  • 回文串相关问题
  • 子序列相关问题

关于字符串的字符编码:

  • ASCII(英语为主的语言)

  • Unicode(多语言,其中最常用的就是UTF-8编码)。UTF-8:将Unicode字符根据大小编成1-6个字节,英文1个字节,汉字通常是3个字节。

字符串匹配问题(模式匹配,,Pattern Matching) :

  • 单模式串匹配:从文本串中找到特定串的所有出现位置。这次主要训练了KMP算法(基于前缀搜索方法)。

  • 多模式串匹配:文本串中找模式串P,其中P是模式串p的集合,找到集合P中p的所有出现位置。

基操

125.验证回文串

测试用例:

a man,a plAn,a canal:Panama

< cctype >

isalnum( ):bool型,判断是否为有效字符(十进制数字/字母

tolower():char型,将有效字符转为小写字母(toupper

AC:对撞指针--left&right

#include<iostream>
#include<string>
using namespace std;

bool ValidPalindrome(string &s){
    string sgood;
    for(char c:s){
        if(isalnum(c)){
            sgood+=tolower(c);
        }
    }
    int n=sgood.size();
    for(int left=0,right=n-1;left<right;){
        if(sgood[left]!=sgood[right])
            return false;//不是回文串
        ++left;
        --right;
    }
    return true; 
}

int main(){
    string s;
    cin>>s;
    if(ValidPalindrome(s))
        cout<<"true"<<endl;
    else   cout<<"false"<<endl;
    return 0;
}

344.反转字符串

UNAC:翻转字符串角标的关系 i&n-1-i ( ≠ i&n-i )

string ReverseString(string &s){
    int n=s.size();
    for(int i=0;i<=n/2;++i){
        swap(s[i],s[n-i]);//s[n-1-i]
    }
    return s;
}

AC:双指针--left&right

n&n-1-i 无法替代lr指针(for循环判断不会出错

#include<iostream>
#include<string>
using namespace std;
string reverse(string &s){
    int left=0;
    int right=s.size()-1-left;
    for(;left<right;++left,--right){
        swap(s[left],s[right]);
    }
    cout<<s<<endl;
    return s;
}

int main(){
    string s;
    cin>>s;
    reverse(s);
    cout<<"[\"";
    for(int i=0;i<s.size()-1;i++){
        cout<<s[i]<<"\",\"";
    }
    cout<<s[s.size()-1]<<"\"]";
}

557.翻转字符串中的单词III

AC:使用额外空间

#include<iostream>
#include<string>
using namespace std;

string reverse(string &s){
    string word;//开新串存翻转后字符串
    int n=s.size();
    int i=0;
    while(i<n){
        int start=i;//单词的起始下标
        while(i<n&&s[i]!=' '){//始
            i++;
        }
        for(int p=start;p<i;p++){
            word.push_back(s[start+i-1-p]);//翻转后存入
        }
        while(i<n&&s[i]==' '){//终
            i++;
            word.push_back(' ');
        }
        return word;
    }
}

int main(){
    string s,rev;
    cin>>s;
    rev=reverse(s);
    cout<<rev;
    return 0;
}

字符串单模式匹配

BruteForce算法

BF暴力匹配:双层for循环

  • 成功:i++; j++;

  • 失败:i回溯;j置0;

RabinKarp算法(滚动哈希算法

RK,使用哈希函数在文本中搜索

。。。看官方讲解的时候只能说什么依托答辩,一堆高级名词直接劝退,后来找到一篇CSDN直呼牛蛙

(参考:滚动哈希——干脆叫前缀和得了——CSDN)

KMP算法

(参考:题解:多图预警

标签:11,Task2,string,int,goal,needle,字符串,打卡,size
From: https://www.cnblogs.com/Weenz-y/p/17840747.html

相关文章

  • 2023-11-18-周六--emo思考中
    现在回想2023.11.11自己的一些思考认为只要我们,面对一个很大的任务.我们只需要每天按部就班的去一点一滴的完成最后也可以很快的完成,,,,现在想想,,,想法太美好了....现实是非常残酷的比如之前说,学习那个安卓开发,,,,讲义很长,,,需要每天去完成一些但是,,,最近这几天,,,一......
  • 【11.0】Python基础之可变和不可变数据类型
    【一】堆【0】引入https://www.hello-algo.com/chapter_heap/堆就像是山川的峰峦,它们层叠起伏、形态各异。每一座山峰都有其高低之分,而最高的山峰总是最先映入眼帘。【1】堆的介绍「堆heap」是一种满足特定条件的完全二叉树,主要可分为图8-1所示的两种类型。......
  • 前端学习笔记202310学习笔记第一百零玖天-vue3-链式调用&对象属性与遍历&this指向&cal
    varobj={name:"geyao",age:22}functionCar(){this.brand="Benz",this.color="red",this.size=18}Car.prototype={age:18,width:2.5}Object.prototype.sex="女"varcar=newCar()for(var......
  • 【2023-11-10】童年素材
    20:00勤奋固然能够帮助我们走向成功,但它不是生命唯一的底色。                                                 ——阿尔弗雷德·舒茨孩子午睡了,熬了一个下午,就差一瓶......
  • mysql数据库ERROR 1193 (HY000): Unknown system variable 'validate_password_policy
    一、概况  平时我们安装完数据库,需要进行对应的密码或者密码策略修改,此时需要mysql的密码验证插件。MySQL可能没有这个插件,就需要进行相应的处理。二、问题描述mysql>setglobalvalidate_password_policy=0;ERROR1193(HY000):Unknownsystemvariable'validate_passw......
  • 20211316郭佳昊 《信息安全系统设计与实现(上)》 第十周学习总结 块设备I/O和缓冲区处理
    一、任务要求[1]知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容(4分)我在学****知识点,请你以苏格拉底的方式对我进行提问,一次一个问题核心是要求GPT:请你以苏格拉底的方式对我进行提问然后GPT就会......
  • 20211128《信息安全系统设计与实现》第12章学习笔记
    一、任务内容自学教材第12章,提交学习笔记(10分)1.知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容(4分)“我在学***X知识点,请你以苏格拉底的方式对我进行提问,一次一个问题”核心是要求GPT:“请你以苏格......
  • 2023年11月17日总结
    更好地观看!总结今天是noip前的最后一次集训!哇酷哇酷!今天就主要是复习了,记录一下做的事情!好兴奋!早上打了昨天T4衍生出来的两个题目,非常好反悔贪心,是我的大脑旋转。准备复习一下扫描线和平衡树。哦对,我要先把前天vp的C题改了。哦对了今天发生了很有趣的事情。打乒乓球......
  • 20231117
    上午摆烂,下午试机,晚上郁郁。这一篇是我写的最长的鲜花(目前)了,下面一大段都是我emo的感言,您可以跳过。我都是考后写游记的,所以现在不会发,这篇只是把今天有些感触的事情写下来。考前莫名有一种无力感,做题效率会很低,上午的\(\mathcal{O}(m^{3}\logn)\)的矩阵快速幂还被卡常了,不......
  • 20231117打卡
    早上起床后,感觉有点疲劳,于是决定给自己放松的一天。下午,我和一些朋友一起去篮球场打篮球。打篮球不仅可以锻炼身体,还可以放松心情,释放压力。我们组织了几场友谊赛,不仅锻炼了身体,还增进了彼此之间的友谊。晚上回到宿舍后,我选择了玩一会儿游戏,选择的游戏是最近非常火爆的《原神》。......