代码随想录——串

news2025/1/23 11:15:27

文章目录

      • 反转字符串
      • 反转字符串Ⅱ
      • 路径加密
      • 反转字符串中的单词
      • 动态口令
      • 字符串匹配
      • 重复的子字符串

反转字符串

344. 反转字符串

//前后对应交换
//0<->sSize-1
//1<->sSize-2
//...
//i<->sSize-1-i,i=0,1,...,(sSize-1)/2
void reverseString(char* s, int sSize) {
    for(int i=0;i<sSize/2;i++){
        char t=s[i];
        s[i]=s[sSize-1-i];
        s[sSize-1-i]=t;
    }
}

反转字符串Ⅱ

541. 反转字符串 II

思路:在规定区间内反转字符串

//反转下标从l到r的这段字符串
void reverse(char *s,int l,int r){
    for(int i=l;i<=(l+r)/2;i++){
        char t=s[i];
        s[i]=s[l+r-i];
        s[l+r-i]=t;
    }
}
char* reverseStr(char* s, int k) {
    int i=0;
    int l=strlen(s);
    while(l-i>k){
        reverse(s,i,i+k-1);
        i+=2*k;
    }
    if(i<l)reverse(s,i,l-1);
    return s;
}

路径加密

LCR 122. 路径加密

char* pathEncryption(char* path) {
    int l=strlen(path);
    for(int i=0;i<l;i++){
        if(path[i]=='.')path[i]=' ';
    }
    return path;
}

反转字符串中的单词

151. 反转字符串中的单词

思路:去除多余的空格,首位的空格以及中间多出的空格,再把整个字符串反转,最后把整个单词反转

char* reverseWords(char* s) {
    int n = strlen(s);
    // 去除首尾空格
    int start = 0, end = n - 1;
    while (start <= end && s[start] == ' ') start++;
    while (end >= start && s[end] == ' ') end--;

    // 分配足够的内存,包括终止符
    char *t = (char *)malloc((end - start + 2) * sizeof(char));
    if (t == NULL) {
        return NULL; // 内存分配失败
    }

    // 去除中间多余的空格
    int j = 0;
    for (int i = start; i <= end; i++) {
        if (s[i] != ' ' || (i > start && s[i - 1] != ' ')) {
            t[j++] = s[i];
        }
    }
    t[j] = '\0'; // 添加终止符

    // 反转整个字符串
    for (int i = 0, j = strlen(t) - 1; i < j; i++, j--) {
        char temp = t[i];
        t[i] = t[j];
        t[j] = temp;
    }

    // 反转每个单词
    int word_start = 0;
    for (int i = 0; i <= strlen(t); i++) {
        if (t[i] == ' ' || t[i] == '\0') {
            int word_end = i - 1;
            while (word_start < word_end) {
                char temp = t[word_start];
                t[word_start] = t[word_end];
                t[word_end] = temp;
                word_start++;
                word_end--;
            }
            word_start = i + 1;
        }
    }

    return t;
}

动态口令

LCR 182. 动态口令

开辟相同大小的空间,模拟

//用辅助字符串
char* dynamicPassword(char* password, int target) {
    char * ans=malloc(sizeof(char)*(strlen(password)+1));
    for(int i=0;i<strlen(password)-target;i++){
        ans[i]=password[i+target];
    }
    for(int i=strlen(password)-target;i<strlen(password);i++){
        ans[i]=password[i+target-strlen(password)];
    }
    ans[strlen(password)]='\0';
    return ans;
}

时间复杂度:O(n)

空间复杂度:O(n)

字符串匹配

28. 找出字符串中第一个匹配项的下标

方法一:暴力

//暴力
int strStr(char* haystack, char* needle) {
    int i=0,j=0;
    int la=strlen(haystack);
    int lb=strlen(needle);
   
    while(i<la&&j<lb){
        if(haystack[i]==needle[j]){
            i++,j++;
        }else{
            i=i-j+1;
            j=0;
        }
    }
    if(j==lb)return i-j;
    else return -1;
}

方法二:KMP

//构建next数组
void getnext(char *s,int l,int *next){
    int j=0;
    next[0]=j;
    int i=1;
    while(i<l){
        if(s[i]==s[j]){
            j++;
            next[i]=j;
            i++;
        }
        else{
            if(j!=0){
                j=next[j-1];
            }
            else{
                next[i]=0;
                i++;
            }
        }
    }
}

// KMP 算法
int strStr(char* haystack, char* needle) {
    int n = strlen(haystack);
    int m = strlen(needle);

    // 特殊情况处理
    if (m == 0) {
        return 0;
    }

    // 构建部分匹配表
    int next[m];
    getnext(needle, m, next);

    int i = 0; // haystack 的索引
    int j = 0; // needle 的索引

    while (i < n) {
        if (haystack[i] == needle[j]) {
            i++;
            j++;
        }

        if (j == m) {
            return i - j; // 找到匹配项
        }
        else if (i < n && haystack[i] != needle[j]) {
            if (j != 0) {
                j = next[j - 1];
            } else {
                i++;
            }
        }
    }

    return -1; // 未找到匹配项
}

重复的子字符串

459. 重复的子字符串

方法一:暴力

列举出子字符串的长度,最长为字符串长度的一半

//暴力
bool repeatedSubstringPattern(char* s) {
    int n=strlen(s);
    for(int i=1;i<=n/2;i++){//i表示字串的长度
        int j=i;
        int k=0;
        while(j<n&&s[k]==s[j]){
            if(k==i-1)k=0;
            else k++;
            j++;
        }
        if(j==n&&k==0)return true;
    }
    return false;
}

方法二:KMP

//KMP
void getnext(char *s,int *next,int n){
    next[0]=-1;
    int i=-1,j=0;
    while(j<n-1){
        if(i==-1||s[i]==s[j]){
            i++,j++;
            next[j]=i;
        }
        else{
            i=next[i];
        }
    }
}
bool repeatedSubstringPattern(char* s) {
    int n=strlen(s);
    if(n<=1)return false;
    int next[n];
    getnext(s,next,n);
    int k=next[n-1];//若存在子串,k后面为最后一个字串
    int len=n-k-1;
    int i=len;
    k=0;
    while(i<n&&s[k]==s[i]){
        if(k==len-1)k=0;
        else{      
            k++;
        }
        i++;
    }
    if(k==0&&i==n)return true;
    else return false;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2280868.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Springboot自动配置的原理

先拿redis来举个例子 第一步导入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> 第二步配置 spring: redis: database:host:127.0.0.1 port…

【动态规划】落花人独立,微雨燕双飞 - 8. 01背包问题

本篇博客给大家带来的是01背包问题之动态规划解法技巧. &#x1f40e;文章专栏: 动态规划 &#x1f680;若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 王子,公主请阅&#x1f680; 要开心要快乐顺便…

记一次虚机上传过慢问题排查

最近线上虚机有个特殊的用户反馈&#xff0c;用户反馈虚机从A服务器下载文件特别慢&#xff0c;于是scp A服务器数据到本地client&#xff0c;发现 只有几十K的流量。 当时第一反应怀疑是虚机负载压力比较大&#xff0c;但是查看虚机IO以及负载都很低。。。。 然后tcpdump抓包发…

web服务器 网站部署的架构

WEB服务器工作原理 Web web是WWW(World Wide Web)的简称&#xff0c;基本原理是&#xff1a;请求(客户端)与响应(服务器端)原理&#xff0c;由遍布在互联网中的Web服务器和安装了Web浏览器的计算机组成 客户端发出请求的方式&#xff1a;地址栏请求、超链接请求、表单请求 …

数据结构——实验七·排序

嗨~~欢迎来到Tubishu的博客&#x1f338;如果你也是一名在校大学生&#xff0c;正在寻找各种编程资源&#xff0c;那么你就来对地方啦&#x1f31f; Tubishu是一名计算机本科生&#xff0c;会不定期整理和分享学习中的优质资源&#xff0c;希望能为你的编程之路添砖加瓦⭐&…

Windows系统提示RunDLL PcaWallpaperAppDetect错误修复方法

最近&#xff0c;Win11 24H2预览版和Win10 LTSC 2025功能更新偶尔会触发RunDLL错误弹窗 具体表现为 //英文提示 Error in C:\WINDOWS\system32\PcaSvc.dll Missing entry: PcaWallpaperAppDetect//中文提示 C:\WINDOWS\system32\PcaSvc.dll出错 丢失条目:PcaWallpaperAppDe…

计算机组成原理——数据表示(二)

当生活的压力和困惑缠绕在身边&#xff0c;我们往往需要振奋精神&#xff0c;勇往直前。无论在何种困境中&#xff0c;我们都要保持积极的态度和坚定的信念。将悲观的情绪抛之脑后&#xff0c;展现出坚强的意志力和无尽的活力。振奋精神意味着我们要战胜自己内心的负面情绪&…

人源化抗体的改造方式及其优势【卡梅德生物】

随着生物制药行业的迅速发展&#xff0c;抗体药物已经成为治疗多种疾病&#xff08;尤其是癌症、免疫性疾病等&#xff09;的重要手段。抗体人源化改造技术作为抗体药物研发的关键技术之一&#xff0c;在提高药物疗效和降低免疫原性方面发挥了至关重要的作用。 1. 人源化抗体的…

【Linux】深刻理解动静态库

1.什么是库 库是写好的现有的&#xff0c;成熟的&#xff0c;可以复⽤的代码。现实中每个程序都要依赖很多基础的底层库&#xff0c;不可能每个⼈的代码都从零开始&#xff0c;因此库的存在意义⾮同寻常。本质上来说库是⼀种可执⾏代码的⼆进制形式&#xff0c;可以被操作系统载…

【java数据结构】其他非基于比较排序

【java数据结构】其他非基于比较排序 一、计数排序二、基数排序三、桶排序 博客最后附有整篇博客的全部代码&#xff01;&#xff01;&#xff01; 一、计数排序 场景&#xff1a;集中在某个范围内的一组数据 思路&#xff1a; 找到这组序列的最大值和最小值&#xff0c;通过…

博客之星2024年度总评选——我的年度创作回顾与总结

2024年&#xff0c;是我在CSDN博客上持续耕耘、不断成长的一年。在此&#xff0c;与大家分享一下我的年度创作回顾与总结。 一、创作成长与突破 在人工智能领域&#xff0c;技术迭代迅速&#xff0c;知识更新频繁。为了保持自己的竞争力&#xff0c;在今年&#xff0c;我始终…

ChromeOS 132 版本更新

ChromeOS 132 版本更新 1. 企业定制化 Chrome Web Store 管理员现在可以使用新设置定制 Chrome Web Store 以适应他们管理的用户&#xff0c;包括以下功能&#xff1a; 添加公司标志添加首页横幅和自定义公告策划扩展集合实施基于类别的控制 这些设置可以通过管理员控制台进…

Golang Gin系列-5:数据模型和数据库

在这篇Gin教程的博客中&#xff0c;我们将探索如何将模型和数据库与Gin框架无缝集成&#xff0c;使你能够构建健壮且可扩展的web应用程序。通过利用流行的库并遵循最佳实践&#xff0c;你将学习如何定义模型、建立数据库连接、执行CRUD操作以及确保基于gin的项目中的数据完整性…

计算机毕业设计hadoop+spark股票基金推荐系统 股票基金预测系统 股票基金可视化系统 股票基金数据分析 股票基金大数据 股票基金爬虫

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

设计模式的艺术-代理模式

结构性模式的名称、定义、学习难度和使用频率如下表所示&#xff1a; 1.如何理解代理模式 代理模式&#xff08;Proxy Pattern&#xff09;&#xff1a;给某一个对象提供一个代理&#xff0c;并由代理对象控制对原对象的引用。代理模式是一种对象结构型模式。 代理模式类型较多…

Spring Boot整合Thymeleaf、JDBC Template与MyBatis配置详解

本文将详细介绍如何在Spring Boot项目中整合Thymeleaf模板引擎、JDBC Template和MyBatis&#xff0c;涵盖YAML配置、依赖版本匹配、项目结构设计及代码示例。 一、版本兼容性说明 Spring Boot版本与Java版本对应关系 Spring Boot 2.x&#xff1a;支持Java 8、11&#xff08;推…

【博客之星】2024年度创作成长总结 - 面朝大海 ,春暖花开!

没关系的&#xff0c;大家都会做错选择&#xff0c;会 莫名其妙掉眼泪&#xff0c;走在路上会突然崩溃&#xff0c; 但这并不影响我们去看看晚霞&#xff0c; 再次爱上这个世界。 面朝大海 &#xff0c;春暖花开! about meReviewLife about me 现在我是一名24级计算机类的…

StyleMaster: Stylize Your Video with Artistic Generation and Translation 论文解读

目录 一、概述 二、相关工作 1、图像风格化 2、视频风格化 三、StyleMaster 1、创建对比数据集 2、提取全局描述子 3、局部描述和全局描述结合 4、时间和风格质量的运动适配器 5、Gray Tile ControlNet 四、实验 一、概述 Our StyleMaster demonstrates superior vi…

c++进阶---c++三大特性之一---多态

多态的简单介绍&#xff1a;是一种动态的访问函数&#xff0c;比如&#xff1a;你定义了一个一个人类和一个学生类&#xff0c;当你传入的是学生类的时候&#xff0c;你需要有购物优惠&#xff0c;这种情境下用多态就很适用。 1.简单的多态使用&#xff1a; 1.1构造多态的条件…

安卓程序作为web服务端的技术实现(二):Room 实现数据存储

已经实现web服务器安卓程序作为web服务端的技术实现&#xff1a;AndServer 实现登录权限拦截-CSDN博客 现在需要和正常web项目类似&#xff0c;那么就需要操作数据库 一般web项目都是选择较为重型的数据库如MySQL&#xff0c;SQL server等 这里是安卓项目&#xff0c;我目前…