String +memset字符串类题型【C++】

tips:

1、寻找最大公共子串时,如果字符串可以旋转但是不能反转,考虑在每个字符串后重复一次自身,如 "abcd" 变为 "abcdabcd",这样在用dp就可以了。

如何变环+拆环为链:

cpp 复制代码
 cin>>n>>m;
    //拆环为链,复制一遍字符串串 
    for(int i = 1; i <= n;++i){
        cin>>s[i];
        s[i]+=s[i];
    }

寻找最大公共子串:

cpp 复制代码
int cal_lcs(string a,string b)
{
    a = " "+ a, b =" "+b;
    memset(f,0,sizeof f);//对f初始化
    int cnt = 0;
    for(int i = 1;i<=a.size();++i)
    {
        for(int j = 1;j<=b.size();++j)
        {
            if(a[i] == b[j]) f[i][j] = max(f[i][j],f[i-1][j-1]+1);
            cnt = max(cnt,f[i][j]);
        }
    }
    return cnt;
}

menset()

针对menset()函数做一个简单的介绍

cpp 复制代码
void *memset(void *str, int c, size_t n)
  • 解释:复制字符 c(一个无符号字符)到参数 str 所指向的字符串的前 n 个字符。
  • 作用:是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法
  • 头文件:C中#include<string.h>,C++中#include<cstring>

注意!menset()赋值一般用于初始化,其按照字节进行复制,将参数转化为二进制再填入!(int有四个字节,在转成二进制再赋值的情况下可能会出问题)

因此在int类型的赋值中一般只能赋值为0或-1,不推荐其他值。

为地址str开始的n个字节赋值c,注意:是逐个字节赋值,str开始的n个字节中的每个字节都赋值为c。
(1) 若str指向char型地址,value可为任意字符值;
(2) 若str指向非char型,如int型地址,value的值只能是-1或0,因为-1和0转化成二进制后每一位都是一样的,设int型占4个字节,则-1=0XFFFFFFFF, 0=0X00000000。

memset初始化为无穷大

cpp 复制代码
memset(a , 0x3f , sizeof a);
相关推荐
wabs6662 小时前
关于二叉树【力扣572.另一棵树的子树的思考】
数据结构·c++·算法·leetcode·二叉树
风合星语3 小时前
2026 ROS 2 Lyrical C++ 入门(五):Action 实战——任务反馈、取消与超时处理
c++·机器人·ros2·异步编程·lyrical
91刘仁德3 小时前
C++ 继承和多态 设计模式
c语言·c++·笔记
码行山野赴时序归途4 小时前
链表家族收官篇:循环链表
c语言·开发语言·数据结构·链表
景熙55234 小时前
单体项目编写思路和落地形式
java·开发语言
库玛西4 小时前
哈夫曼树与前缀编码:数据压缩的贪心核心
c语言·c++·笔记·考研
别动我齐刘海4 小时前
ROS2 Jazzy + C++ 实战路线——进阶学习3
c++·人工智能·vscode·python·算法·机器学习·机器人
0+1114 小时前
算法 --滑动窗口
c++·算法·leetcode
计算机毕设定制辅导-无忧学长4 小时前
《基于SpringBoot的未成年人健康知识科普平台的设计与实现》
java·开发语言·vue.js·spring boot·未成年人健康知识科普平台
stolentime5 小时前
(有原题)CSP-S2026第一轮试题(附答案解析、markdown源码)
c++·csp