代码随想录笔记--字符串篇

news2024/10/6 2:23:43

目录

1--反转字符串

2--反转字符串II

3--反转字符串中的单词

4--KMP算法

5--重复的子字符串


1--反转字符串

主要思路:

        双指针算法,交换两个指针的字符;

#include <iostream>
#include <vector>

class Solution {
public:
    void reverseString(std::vector<char>& s) {
        if(s.size() == 0) return;
        int l = 0, r = s.size() - 1;
        while(l < r){
            std::swap(s[l], s[r]);
            l++;
            r--;
        }
    }
};

int main(int argc, char* argv[]){
    // s = ["h","e","l","l","o"]
    std::vector<char> s = {'h', 'e', 'l', 'l', 'o'};
    Solution S1;
    S1.reverseString(s);
    for(auto c : s) std::cout << c << " ";
    std::cout << std::endl;
    return 0;
}

2--反转字符串II

主要思路:

        以 2k 个字符为一组进行遍历;

#include <iostream>
#include <string>
#include <algorithm>

class Solution {
public:
    std::string reverseStr(std::string s, int k) {
        for(int i = 0; i < s.length(); i += 2*k){
            if(i + k <= s.length()) {
                std::reverse(s.begin() + i, s.begin() + i + k);
            }
            else{
                std::reverse(s.begin() + i, s.end());
            }           
        }
        return s;
    }
};

int main(int argc, char* argv[]){
    // s = "abcdefg", k = 2
    std::string test = "abcdefg";
    int k = 2;
    Solution S1;
    std::string res = S1.reverseStr(test, k);
    std::cout << res << std::endl;
    return 0;
}

3--反转字符串中的单词

主要思路1:

        遍历提取每一个有效的单词,存储在一个栈中,最后遍历栈连接字符串即可;空间复杂度为O(N);

#include <iostream>     
#include <stack>         
#include <string>       

class Solution {
public:
    std::string reverseWords(std::string s) {
      std::stack<std::string> stk;
      std::string tmp = "";
      for(int i = 0; i < s.length(); i++){
         if(s[i] == ' ' && tmp == "") continue; // 单词前的空格
         else if(s[i] == ' ' && tmp != ""){ // 单词间的空格
            stk.push(tmp);
            tmp = "";
         }
         else{
            tmp += s[i];
         }
      }
      stk.push(tmp); //最后一个有效单词
      std::string res;
      while(!stk.empty()){
         if(res.length() == 0) res += stk.top();
         else{
            res += " ";
            res += stk.top();
         }
         stk.pop();
      }
      return res;
    }
};

int main (int argc, char *argv[]){
   std::string test = "the sky is blue";
   Solution S1;
   std::string res = S1.reverseWords(test);
   std::cout << res << std::endl;
   return 0;
}

主要思路2:

        不使用辅助空间,要求空间复杂度为O(1);首先使用快慢指针剔除多余的空格,接着反转所有字符,最后对单词的字符进行再次反转;

#include <iostream>             
#include <string>       
#include <algorithm>

class Solution {
public:
    std::string reverseWords(std::string s) {
      //去除多余的空格(参考移除数组的元素,使用快慢指针)
      removeExtraSpace(s);
      //反转所有字符
      std::reverse(s.begin(), s.end());
      //按单词再次反转
      int start = 0;
      for(int i = 0; i < s.length(); i++){
         // 遇到单词间的空格 
         if(s[i] == ' ') {
            std::reverse(s.begin()+start, s.begin()+i);
            start = i + 1;
         }
      }
      // 反转最后一个单词
      std::reverse(s.begin()+start, s.end());
      return s;
    }

    void removeExtraSpace(std::string &s){
      int slow = 0;
      for(int fast = 0; fast < s.length(); fast++){
         if(s[fast] == ' ') continue;
         if(slow != 0){ // 单词间的空格
            s[slow] = ' ';
            slow++;
         }
         while(fast < s.length() && s[fast] != ' '){ //将非空格字符覆盖到slow的位置
            s[slow] = s[fast];
            slow++;
            fast++;
         }
      }
      s.resize(slow);
    }
};

int main (int argc, char *argv[]){
   std::string test = "the sky is blue";
   Solution S1;
   std::string res = S1.reverseWords(test);
   std::cout << res << std::endl;
   return 0;
}

4--KMP算法

数据结构笔记--KMP算法的实现

5--重复的子字符串

主要思路:

#include <iostream>
#include <string>
#include <algorithm>

class Solution {
public:
    bool repeatedSubstringPattern(std::string s) {
        std::string ss = s + s;
        ss = ss.substr(1, ss.size() - 2);
        if(ss.find(s) != -1) return true;
        else return false;
    }
};

int main(int argc, char* argv[]){
    // s = "abab"
    std::string test = "abab";
    Solution S1;
    bool res = S1.repeatedSubstringPattern(test);
    if(res) std::cout << "true" << std::endl;
    else std::cout << "false" << std::endl;
    return 0;
}

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

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

相关文章

Unity ShaderGraph教程——进阶shader

1.水面&#xff08;一&#xff09; 公式&#xff1a;场景深度 节点深度 — 屏幕空间位置的W向量 半透明物体与不透明物体的相交边缘 原理&#xff1a;场景深度 节点深度包含透明像素&#xff0c;屏幕空间w向量不包含透明像素。 注意&#xff1a;需要在UniversalRP-xxxQuali…

PHP旅游管理系统Dreamweaver开发mysql数据库web结构php编程计算机网页

一、源码特点 PHP 旅游管理系统是一套完善的web设计系统&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 PHP 旅游管理系统 源码下载地址&#xff1a; https://download.csdn.net/download/qq_41…

linux centos7 系统之编程:求水仙花数

在Python编程中&#xff0c;有列表、元组和字典三类变量可以使用&#xff0c;方便数据的存储与处理&#xff0c;而bash中仅有字符串变量、数组、函数可用&#xff0c;方法运用上受到限制&#xff0c;这与bash基于C语言&#xff0c;注重语法结构的严谨有关。而Python等高级语言更…

JS数组原理探究!

JavaScript 数组的 API 经常会被 JS 开发者频繁使用&#xff0c;在整个 JavaScript 的学习过程中尤为重要。 数组作为一个最基础的一维数据结构&#xff0c;在各种编程语言中都充当着至关重要的角色&#xff0c;你很难想象没有数组的编程语言会是什么模样。特别是 JavaScript&…

Stable Diffusion 提示词技巧

文章目录 背景介绍如何写好提示词提示词的语法正向提示词负向提示词 随着AI技术的不断发展&#xff0c;越来越多的新算法涌现出来&#xff0c;例如Stable Diffusion、Midjourney、Dall-E等。相较于传统算法如GAN和VAE&#xff0c;这些新算法在生成高分辨率、高质量的图片方面表…

可控生成:ControlNet原理

论文&#xff1a;Adding Conditional Control to Text-to-Image Diffusion Models 代码&#xff1a;lllyasviel/ControlNet 简单来说ControlNet希望通过输入额外条件来控制大型图像生成模型&#xff0c;使得图像生成模型根据可控。 1. 动机 当前文生图任务中会出现如下问题&…

【LeetCode】剑指 Offer Ⅱ 第5章:哈希表(6道题) -- Java Version

题库链接&#xff1a;https://leetcode.cn/problem-list/e8X3pBZi/ 类型题目解决方案哈希表的设计剑指 Offer II 030. 插入、删除和随机访问都是O(1) 的容器HashMap ArrayList ⭐剑指 Offer II 031. LRU 缓存HashMap 双向链表 ⭐哈希表的应用剑指 Offer II 032. 有效的变位…

pytorch中 nn.Conv2d的简单用法

torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride1, padding0, dilation1, groups1, biasTrue,padding_modezeros)参数介绍&#xff1a; in_channels&#xff1a;卷积层输入通道数 out_channels&#xff1a;卷积层输出通道数 kernel_size&#xff1a;卷积层的…

AZ900备考

文章目录 云服务的概念云服务模型云服务类型消费的模型云服务的好处可靠性和可预测性的优势云中的管理 Azure 体系结构和服务核心结构组件物理基础结构组件 Azure计算和网络服务Azure 存储服务身份认证AD身份认证 Azure 管理和治理成本管理治理合规性的功能和工具管理和部署Azu…

Java设计模式:四、行为型模式-05:备忘录模式

文章目录 一、定义&#xff1a;备忘录模式二、模拟场景&#xff1a;备忘录模式三、改善代码&#xff1a;备忘录模式3.1 工程结构3.2 备忘录模式模型结构图3.3 备忘录模式定义3.3.1 配置信息类3.3.2 备忘录类3.3.3 记录者类3.3.4 管理员类 3.4 单元测试 四、总结&#xff1a;备忘…

如何构建自己的技术博客

本文相关知识点&#xff1a; markdownVuepress/vitepressGitHub pages 托管服务 为什么建议搭建个人博客网站 拥有自己的技术博客&#xff0c;不仅可以提升自己的技术能力&#xff0c;还可以提升自己的影响力&#xff0c;未来也可能带来一些“睡后”收益。 对于我们职场新人…

QTday2(登录界面+跳转——小黄人篇)

1.完成登录框的按钮操作&#xff0c;并在登录成功后进行界面跳转 form.h&#xff1a; #ifndef FORM_H #define FORM_H#include <QWidget> #include <QPushButton> #include <QDebug> #include <QLineEdit> //行编辑器 #include <QLab…

W5500-EVB-PICO主动PING主机IP检测连通性(十)

前言 上一章我们用W5500_EVB_PICO 开发板做UDP组播数据回环测试&#xff0c;那么本章我们进行W5500_EVB_PICO Ping的测试。 什么是PING&#xff1f; Ping &#xff08;Packet Internet Groper&#xff09;是一种因特网包探索器&#xff0c;用于测试网络连接量的程序 。Ping是…

python读取图像小工具

一、和图像交互获得图像的坐标和像素值 import cv2 import numpy as np import signal import threading import timeif __name__ __main__:img cv2.imread(XXX,0)#读取图片font_face,font_scale,thicknesscv2.FONT_HERSHEY_SIMPLEX,0.5,1#鼠标交互def mouseHandler(event,x…

Android基础之Activity生命周期

Activity是Android四大组件之一、称为之首也恰如其分。 Activity直接翻译为中文叫活动。在Android系统中Activity就是我看到的一个完整的界面。 界面中看到的TextView(文字&#xff09;、Button(按钮)、ImageView&#xff08;图片&#xff09;都是需要Activity来承载的。 总…

linux免密登录最简单--图文详解

最简单的免密登录 1.A电脑生成秘钥 ssh-keygen -t rsa 2.A电脑将秘钥传给B电脑 ssh-copy-id root192.168.1.129 #将秘钥直接传给B电脑 需要输入B电脑的密码&#xff0c;可以看到成功。 3.测试 同理&#xff1a;如果B->A也需要免密登录&#xff0c;统一的操作。 大功告…

集成指挥平台定时任务故障流量分析

01故障现象 集成指挥平台中有定时任务定时传输数据到总队&#xff0c;总队定时下发数据到市交警支队。市交警支队发现定时任务一直出现执行失败的错误。市交警支队和总队联系&#xff0c;说需要市交警支队排查一下自身网络&#xff0c;前两天在应用服务器上面抓了定时任务的数…

大数据、AI和云原生:引领未来软件开发的技术演进

文章目录 **1. 数据驱动的创新&#xff1a;****2. 智能化应用的兴起&#xff1a;****3. 云原生的敏捷和可扩展性&#xff1a;****4. 实时性和即时性&#xff1a;****5. 数据隐私和安全&#xff1a;****6. 跨平台和跨设备&#xff1a;****7. 自动化和智能编程&#xff1a;****8.…

Stable Diffusion 多视图实践

此教程是基于秋叶的webui启动器 1.Stable Diffsuion 使用多视图需要准备一个多角度open pose 图 我给大家提供一个可使用的。 2.需要添加图片到到controlnet当中,不要选择预处理器,选择模型为openpose的模型,然后需要点选同步图片尺寸。 3.然后填写关键字可以参照一下这个…

IBM Spectrum LSF Explorer 为要求苛刻的分布式和任务关键型高性能技术计算环境提供强大的工作负载管理

IBM Spectrum LSF Explorer 适用于 IBM Spectrum LSF 集群的强大、轻量级报告解决方案 亮点 ● 允许不同的业务和技术用户使用单一解决方案快速创建和查看报表和仪表板 ● 利用可扩展的库提供预构建的报告 ● 自定义并生成性能、工作负载和资源使用情况的报…