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

代码随想录day09

151.反转字符串中的单词,需二刷

//先去除多余空格,再反转所有字符,再反转单词,即可反转字符串中的单词

    void removeWhiteSpace(string& s){int slowIndex = 0;for(int fastIndex = 0; fastIndex < s.size(); fastIndex++){if(s[fastIndex] != ' '){if(slowIndex != 0){s[slowIndex++] = ' ';}while(fastIndex < s.size() && s[fastIndex] != ' '){s[slowIndex++] = s[fastIndex++];}}}s.resize(slowIndex);}void swapword(string& s, int left, int right){for(; left < right; left++, right--){swap(s[left], s[right]);}}string reverseWords(string s) {removeWhiteSpace(s);swapword(s, 0, s.size()-1);int start = 0;for(int i = 0; i <= s.size(); i++){if(s[i] == ' ' || i == s.size()){swapword(s,start,i-1);start = i + 1;}}return s;}

55.右旋字符串

//了解反转,再反转的用法

#include<iostream>
#include<algorithm>
using namespace std;int main(){int k;string s;cin >> k;cin >> s;reverse(s.begin(),s.end());reverse(s.begin(), s.begin()+k-1);reverse(s.begin()+k,s.end());cout << s;
}

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

//KMP经典问题,需了解KMP算法中的具体步骤及实现细节,主要了解最长公共前后缀的概念,以及字符不匹配时从j以前字符串的最长公共前后缀位置开始重新匹配

    void getNext(int* next, string& needle){int j = 0;next[j] = 0;for(int i = 1; i < needle.size(); i++){while(j > 0 && needle[i] != needle[j]){j = next[j - 1];}if(needle[i] == needle[j]){j++;}next[i] = j;}}int strStr(string haystack, string needle) {vector<int> next(needle.size());getNext(&next[0], needle);int j = 0;for(int i = 0; i < haystack.size(); i++){while(j > 0 && haystack[i] != needle[j]){j = next[j - 1];}if(haystack[i] == needle[j]){j++;}if(j == needle.size()){return (i - needle.size() + 1);}}return -1;}

459.重复的子字符串,需二刷

//解法1 KMP算法,需了解为何最长公共前后缀不包含的字符串什么时候是代表s的最小重复子串

    void getNext(int* next, string& s){int j = -1;next[0] = -1;for(int i = 1; i < s.size(); i++){while(j>=0 && s[i] != s[j+1]){j = next[j];}if(s[i] == s[j+1]){j++;}next[i] = j;}}bool repeatedSubstringPattern(string s) {vector<int> next(s.size());getNext(&next[0], s);int len = s.size();int token = len - (next[len - 1] + 1);if((next[len - 1] != -1) && (len % token == 0)){return true;}return false;}

//解法2.移动匹配

//如果由重复子串构成,则能在拼接出的字符串中找到新的相同字符串

    bool repeatedSubstringPattern(string s) {string t = s + s;t.erase(t.begin()); t.erase(t.end() - 1); // 掐头去尾if (t.find(s) != std::string::npos) return true; // rreturn false;}

http://www.lryc.cn/news/534103.html

相关文章:

  • Racecar Gym 总结
  • 【C++高并发服务器WebServer】-15:poll、epoll详解及实现
  • Visual Studio 2022 中使用 Google Test
  • Office/WPS接入DeepSeek等多个AI工具,开启办公新模式!
  • Meta AI 最近推出了一款全新的机器学习框架ParetoQ,专门用于大型语言模型的4-bit 以下量化
  • 操作系统—进程与线程
  • 团队:前端开发工期参考 / 防止工期不足、过足、工期打架
  • APL语言的云计算
  • idea启动报错# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00007ffccf76e433
  • C++拷贝构造函数与运算符重载应该注意的一个问题?
  • [7] 游戏机项目说明
  • “深入浅出”系列之C++:(20)C++17
  • .net一些知识点5
  • (七)QT——消息事件机制&绘图&文件
  • 【虚幻引擎UE】AOI算法介绍与实现案例
  • python学opencv|读取图像(六十)先后使用cv2.erode()函数和cv2.dilate()函数实现图像处理
  • AI能帮谷歌SEO做什么?
  • SSA-TCN麻雀算法优化时间卷积神经网络时间序列预测未来Matlab实现
  • 【机器学习】数据预处理之数据归一化
  • 【专题】2024-2025人工智能代理深度剖析:GenAI 前沿、LangChain 现状及演进影响与发展趋势报告汇总PDF洞察(附原数据表)
  • 非递减子序列(力扣491)
  • 网站快速收录策略:提升爬虫抓取效率
  • 系统思考—自我超越
  • 苍穹外卖-菜品分页查询
  • 子集II(力扣90)
  • user、assistant、system三大角色在大语言模型中的作用(通俗解释)
  • LeetCode 3444.使数组包含目标值倍数的最小增量
  • 2月9日星期日今日早报简报微语报早读
  • MOSSE目标跟踪算法详解
  • 生成式聊天机器人 -- 基于Pytorch + Global Attention + 双向 GRU 实现的SeqToSeq模型 -- 下