当前位置: 首页 > news >正文

代码随想录——串

文章目录

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

反转字符串

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;}

相关文章:

代码随想录——串

文章目录 反转字符串反转字符串Ⅱ路径加密反转字符串中的单词动态口令字符串匹配重复的子字符串 反转字符串 344. 反转字符串 //前后对应交换 //0<->sSize-1 //1<->sSize-2 //... //i<->sSize-1-i,i0,1,...,(sSize-1)/2 void reverseString(char* s, int s…...

詳細講一下RN(React Native)中的列表組件FlatList和SectionList

1. FlatList 基礎使用 import React from react; import { View, Text, FlatList, StyleSheet } from react-native;export const SimpleListDemo: React.FC () > {// 1. 準備數據const data [{ id: 1, title: 項目 1 },{ id: 2, title: 項目 2 },{ id: 3, title: 項目 3…...

TDengine 与上海电气工业互联网平台完成兼容性认证

在工业数字化转型和智能化升级的浪潮中&#xff0c;企业对高效、可靠的数据管理解决方案的需求日益增长。特别是在风电智能运维、火电远程运维、机床售后服务等复杂多样的工业场景下&#xff0c;如何实现海量设备和时序数据的高效管理&#xff0c;已经成为推动行业升级的关键。…...

随机矩阵投影长度保持引理及其证明

原论文中的引理 2 \textbf{2} 2 1. \textbf{1. } 1. 引理 1 \textbf{1} 1(前提之一) 1.1. \textbf{1.1. } 1.1. 引理 1 \textbf{1} 1的内容 &#x1f449;前提&#xff1a; X ∼ N ( 0 , σ ) X\sim{}N(0,\sigma) X∼N(0,σ)即 f ( x ) 1 2 π σ e – x 2 2 σ 2 f(x)\text{}…...

深度学习利用数据加载、预处理和增强数据提高模型的性能

深度学习数据预处理是一个关键步骤&#xff0c;旨在提高模型的性能和准确性。 通过数据加载、预处理和增强&#xff0c;可以显著提高深度学习模型的性能和准确性。在实际应用中&#xff0c;需要根据具体的数据和任务来选择合适的预处理和增强技术。 以下将详细论述并举例说明如…...

ESP32服务器和PC客户端的Wi-Fi通信

ESP32客户端-服务器Wi-Fi通信 本指南将向您展示如何设置ESP32板作为服务端&#xff0c;PC作为客户端&#xff0c;通过HTTP通信&#xff0c;以通过Wi-Fi&#xff08;无需路由器或互联网连接&#xff09;交换数据。简而言之&#xff0c;您将学习如何使用HTTP请求将一个板的数据发…...

新型人工智能“黑帽”工具:GhostGPT带来的威胁与挑战

生成式人工智能的发展既带来了有益的生产力转型机会&#xff0c;也提供了被恶意利用的机会。 最近&#xff0c;Abnormal Security的研究人员发现了一个专门为网络犯罪创建的无审查AI聊天机器人——GhostGPT&#xff0c;是人工智能用于非法活动的新前沿&#xff0c;可以被用于网…...

Spring MVC (三) —— 实战演练

项目设计 我们会将前端的代码放入 static 包下&#xff1a; 高内聚&#xff0c;低耦合 这是我们在实现项目的设计思想&#xff0c;一个项目里存在很多个模块&#xff0c;每一个模块内部的要求类与类、方法与方法要相互配合紧密联系&#xff0c;这就是高内聚&#xff0c;低耦合…...

媒体新闻发稿要求有哪些?什么类型的稿件更好通过?

为了保证推送信息的内容质量&#xff0c;大型新闻媒体的审稿要求一向较为严格。尤其在商业推广的过程中&#xff0c;不少企业的宣传稿很难发布在这些大型新闻媒体平台上。 媒体新闻发稿要求有哪些&#xff1f;就让我们来了解下哪几类稿件更容易过审。 一、媒体新闻发稿要求有哪…...

【游戏设计原理】82 - 巴斯特原则

巴斯特原则的核心是“对你的玩家好一点”&#xff0c;这一点直击游戏设计的核心——玩家体验。 现代游戏设计不仅要注重挑战性&#xff0c;还要关注玩家的情绪波动与行为反应。当玩家因为过高的难度感到挫败甚至愤怒时&#xff0c;他们往往选择退出游戏&#xff0c;而不是迎接…...

DDD架构实战第六讲总结:领域驱动设计中的聚合

云架构师系列课程之DDD架构实战第六讲总结:领域驱动设计中的聚合 聚合提升了对象系统的粒度,保证了业务逻辑的完整性,减少了错误产生的概率 一、引言 本讲将探讨领域驱动设计(DDD)中的重要概念——聚合。聚合是业务完整性的单元,是一个更大力度的封装。在领域驱动设计中…...

vim如何设置自动缩进

:set autoindent 设置自动缩进 :set noautoindent 取消自动缩进 &#xff08;vim如何使设置自动缩进永久生效&#xff1a;vim如何使相关设置永久生效-CSDN博客&#xff09;...

C++入门14——set与map的使用

在本专栏的往期文章中&#xff0c;我们已经学习了STL的部分容器&#xff0c;如vector、list、stack、queue等&#xff0c;这些容器统称为序列式容器&#xff0c;因为其底层是线性序列的数据结构&#xff0c;里面存储的是元素本身。而本篇文章我们要来认识一下关联式容器。 &am…...

单片机内存管理剖析

一、概述 在单片机系统中&#xff0c;内存资源通常是有限的&#xff0c;因此高效的内存管理至关重要。合理地分配和使用内存可以提高系统的性能和稳定性&#xff0c;避免内存泄漏和碎片化问题。单片机的内存主要包括程序存储器&#xff08;如 Flash&#xff09;和数据存储器&a…...

【gopher的java学习笔记】Java中Service与Mapper的关系详解

在后端开发中&#xff0c;Java作为一种广泛使用的编程语言&#xff0c;其架构设计和层次划分对于系统的可维护性、可扩展性和性能有着至关重要的影响。特别是在使用MyBatis等持久层框架时&#xff0c;Service层与Mapper层的关系更是值得深入探讨。本文将从Java Web应用程序的角…...

2025美赛B题完整代码+建模过程

问题一 为朱诺市建立一个可持续旅游产业模型。具体要求包括考虑游客数量、总收入,以及为稳定旅游业而实施的措施,明确优化因素和约束条件,并制定额外收入的支出计划,展示这些支出如何反馈到模型中以促进可持续旅游业发展,同时进行敏感性分析,讨论哪些因素最为重要。 为了…...

【MySQL】我在广州学Mysql 系列——MySQL用户管理详解

ℹ️大家好&#xff0c;我是练小杰&#xff0c;本博客是春节前最后一篇了&#xff0c;在此感谢大佬们今年的支持&#xff01;&#xff01;&#x1f64f;&#x1f64f; 接下来将学习MYSQL用户管理的相关概念以及命令~~ 回顾&#xff1a;&#x1f449;【MYSQL触发器的使用】 数据…...

Linux-rt下卡死之hrtimer分析

Linux-rt下卡死之hrtimer分析 日志 超时读过程分析 #define readl_poll_timeout(addr, val, cond, delay_us, timeout_us) \readx_poll_timeout(readl, addr, val, cond, delay_us, timeout_us)34 #define readx_poll_timeout(op, addr, val, cond, sleep_us, timeout_us) \…...

【AI日记】25.01.24

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】【读书与思考】 AI kaggle 比赛&#xff1a;Forecasting Sticker Sales 读书 书名&#xff1a;法治的细节作者&#xff1a;罗翔 律己 AI&#xff1a;8 小时&#xff0c;良作息&#xff1a;00:30-8:30&…...

React 中hooks之useSyncExternalStore使用总结

1. 基本概念 useSyncExternalStore 是 React 18 引入的一个 Hook&#xff0c;用于订阅外部数据源&#xff0c;确保在并发渲染下数据的一致性。它主要用于&#xff1a; 订阅浏览器 API&#xff08;如 window.width&#xff09;订阅第三方状态管理库订阅任何外部数据源 1.1 基…...

游戏存档终极备份指南:用Ludusavi保护你的游戏进度

游戏存档终极备份指南&#xff1a;用Ludusavi保护你的游戏进度 【免费下载链接】ludusavi Backup tool for PC game saves 项目地址: https://gitcode.com/gh_mirrors/lu/ludusavi 你是否曾因电脑重装、系统崩溃或误操作而丢失珍贵的游戏存档&#xff1f;数百小时的游戏…...

Applied Intelligence投稿实战:从格式要求到高接受率的5个关键策略

1. 精准匹配期刊范围&#xff1a;避免编辑秒拒的第一道防线 投稿Applied Intelligence期刊时&#xff0c;最容易被忽视却最关键的一步就是研究范围匹配。我审过30篇稿件&#xff0c;发现80%的"desk rejection"&#xff08;编辑直接拒稿&#xff09;都源于研究方向与…...

Nunchaku-flux-1-dev生成效果对比:不同采样器与步数下的画质差异

Nunchaku-flux-1-dev生成效果对比&#xff1a;不同采样器与步数下的画质差异 最近在玩AI生图的朋友&#xff0c;估计都绕不开一个话题&#xff1a;怎么调参数才能让图更好看&#xff1f;是选个快的采样器&#xff0c;还是选个慢的但质量高的&#xff1f;采样步数到底调到多少才…...

石油勘探中的地震波“翻译官”:如何读懂时距曲线图里的地下秘密?

石油勘探中的地震波“翻译官”&#xff1a;如何读懂时距曲线图里的地下秘密&#xff1f; 站在戈壁滩的勘探营地&#xff0c;望着屏幕上那些看似杂乱的波形曲线&#xff0c;刚入行的地质工程师小李皱起了眉头。"这些弯弯曲曲的线条&#xff0c;到底在诉说什么样的地下故事&…...

s2-proGPU部署方案:多模型共存时s2-pro显存隔离与QoS保障策略

s2-proGPU部署方案&#xff1a;多模型共存时s2-pro显存隔离与QoS保障策略 1. 引言 在GPU服务器上同时运行多个AI模型已成为常态&#xff0c;但这也带来了显存资源竞争和性能波动的问题。本文将详细介绍如何在多模型共存环境下&#xff0c;为s2-pro语音合成模型实现显存隔离与…...

RVC与FunASR联动:中文语音识别+AI翻唱端到端流水线

RVC与FunASR联动&#xff1a;中文语音识别AI翻唱端到端流水线 1. 引言&#xff1a;当AI翻唱遇见语音识别 想象一下这个场景&#xff1a;你有一段喜欢的歌曲音频&#xff0c;想用自己的声音翻唱它&#xff0c;但苦于记不住歌词&#xff0c;或者原唱语速太快跟不上。传统的做法…...

Hunyuan-MT-7B翻译神器快速上手:手把手教你搭建多语言翻译服务

Hunyuan-MT-7B翻译神器快速上手&#xff1a;手把手教你搭建多语言翻译服务 1. 为什么选择Hunyuan-MT-7B 在当今全球化时代&#xff0c;多语言翻译需求日益增长。Hunyuan-MT-7B作为腾讯混元团队开源的70亿参数翻译模型&#xff0c;凭借其出色的性能和易用性&#xff0c;成为开…...

OpenRGB:开源跨平台RGB灯光控制方案,告别多软件困扰实现设备统一管理

OpenRGB&#xff1a;开源跨平台RGB灯光控制方案&#xff0c;告别多软件困扰实现设备统一管理 【免费下载链接】OpenRGB Open source RGB lighting control that doesnt depend on manufacturer software. Supports Windows, Linux, MacOS. Mirror of https://gitlab.com/CalcPr…...

【Cornerstone3D实战】从零构建医学影像三视图渲染器:Dicom文件加载与多平面重建

1. 医学影像三视图渲染器入门指南 第一次接触医学影像开发的朋友可能会被"Dicom"、"三视图重建"这些专业术语吓到。其实用现代Web技术实现一个基础的医学影像查看器&#xff0c;比你想象中简单得多。Cornerstone3D这个开源库就像医学影像界的jQuery&#x…...

手把手教你:5分钟为你的静态网站嵌入AnythingLLM智能聊天机器人

5分钟为静态网站集成AnythingLLM智能聊天室的实战指南 你是否想过在自己的个人博客或产品官网上添加一个能回答访客问题的AI助手&#xff1f;就像那些科技公司官网右下角弹出的智能客服一样。今天我要分享的&#xff0c;是如何用AnythingLLM在5分钟内为任何静态网站嵌入一个私有…...