算法—字符串操作

news2025/1/11 21:52:37

 

394. 字符串解码 - 力扣(LeetCode)

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {  
        string ret=strs[0];//***1***记得先要初始化ret,作为第一个比较值
        for(int i=0;i<strs.size();i++){
            ret=foundcommon(ret,strs[i]);        
        }
        return ret;
    }
    string foundcommon(string str1,string str2){
        int len_min=min(str1.size(),str1.size());
        int i=0;
        for(i=0;i<len_min;i++){
            if(str1[i]!=str2[i]) break;
        }
        return str1.substr(0,i);
    }
};

. - 力扣(LeetCode)

class Solution {
public:
    string longestPalindrome(string s) {//枚举所有子串O(n^2),回文子串的特点,中心轴对称,
        int begin=0; int end=0; int n=s.size();
        int len=0;
        for(int i=0;i<n;i++){
            int left=i; int right=i;
            while(left>=0&&right<n&&s[left]==s[right]){
                left--;right++;
            }
            if(right-left+1>len){
                len=right-left+1;
                begin=left;end=right;
            }
        }

        for(int i=0;i<n;i++){
            int left=i; int right=i+1;
            while(left>=0&&right<n&&s[left]==s[right]){
                left--;right++;
            }
            if(right-left+1>len){
                len=right-left+1;
                begin=left;end=right;
            }
        }
        return s.substr(begin,len);
    }
};

https://leetcode.cn/problems/add-binary/submissions/524491385/icon-default.png?t=N7T8https://leetcode.cn/problems/add-binary/submissions/524491385/

67. 二进制求和 - 力扣(LeetCode) 

class Solution {
public:
    string addBinary(string a, string b) {
        string ret;

        int cur1=a.size()-1;
        int cur2=b.size()-1;
        int t=0;//保留进位

        while(cur1>=0||cur2>=0||t){
            if(cur1>=0) t+=a[cur1--]-'0';
            if(cur2>=0) t+=b[cur2--]-'0';
            ret+=t%2+'0';//低位在left,需要反转
            t/=2;//进位
        }
        reverse(ret.begin(),ret.end());
        return ret;
    }

};

43. 字符串相乘 - 力扣(LeetCode)

class Solution {
public:
    string multiply(string num1, string num2) {
        int m=num1.size();
        int n=num2.size();
        reverse(num1.begin(),num1.end());
        reverse(num2.begin(),num2.end());

        vector<int> tmp(m+n);//实际只用m+n-1个位数,也就是0~m+n-2,对于无进位相加。
        //先无进位相乘
        cout<<m<<"  "<<n<<endl;
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                tmp[i+j]+=(num1[i]-'0')*(num2[j]-'0');//**1**+=不是=,这里是累加
                cout<<tmp[i+j]<<endl;
            }
        }
        for(int i=0;i<m+n-1;i++){
            cout<<tmp[i]<<endl;
        }
        //处理进位
        string ret;
        int t=0;
        int i=0;
        while(i<m+n-1||t){//**3**i<m+n-1:避免ret什么都不放,不用tmp[i]!=0:可能有问题,111,100;直接结束循环
            t+=tmp[i++];
            ret+=t%10+'0';
            t/=10;
        }
        //处理ret最后插入的0,因为是倒序,所以无法此0是前导0,不能统计
        while(ret.size()>1&&ret.back()=='0') ret.pop_back();//**2**size()=1时候,只有一位,此位为0,所以不为前导0.
        reverse(ret.begin(),ret.end());
        return ret;
    }
};

394. 字符串解码 - 力扣(LeetCode)

class Solution {
public:
    string decodeString(string s) {
        stack<int> nums;
        stack<string> st;
        st.push("");
        int i=0; int n=s.size();
        while(i<n){
            if('0'<=s[i]&&s[i]<='9'){
                int tmp=s[i++]-'0';
                cout<<"tmp:"<<tmp<<endl;
                cout<<s[i]<<endl;
                while('0'<=s[i]&&s[i]<='9') {
                    tmp=tmp*10+s[i++]-'0';//***1**提取数组:不是+=,通过变换也不行,是=
                    cout<<tmp<<endl;
                }
                nums.push(tmp);
                cout<<"nums栈顶"<<nums.top()<<endl;
                //cout<<"st栈顶"<<st.top()<<endl;
            }else if(s[i]=='['){
                cout<<"进入"<<endl;
                i++;//提取字母

                string str1="";
                cout<<s[i]<<endl;
                while('a'<=s[i]&&s[i]<='z'){//牢记提取一串子数组的话,判断条件两个必须分开写
                    str1+=s[i++];
                    cout<<str1<<endl;
                }
                // cout<<str1<<endl;
                st.push(str1);
                // cout<<"nums栈顶"<<nums.top()<<endl;
                 cout<<"st栈顶"<<st.top()<<endl;

            }else if(s[i]==']'){//提取最内层的字符串
                int k=nums.top();
                nums.pop();
                string str1=st.top();
                st.pop();
                string str2="";
                while(k--){
                    str2+=str1;
                }
                st.top()+=str2;
                i++;
                //cout<<"nums栈顶"<<nums.top()<<endl;
                // cout<<"st栈顶"<<st.top()<<endl;

            }else{
                while('a'<=s[i]&&s[i]<='z')  st.top()+=s[i++];
                // cout<<"nums栈顶"<<nums.top()<<endl;
                // cout<<"st栈顶"<<st.top()<<endl;

            }
        }
        return st.top();
    }
};

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

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

相关文章

03-07Java自动化之JAVA基础之循环

JAVA基础之循环 一、for循环 1.1for循环的含义 for&#xff08;初始化语句;条件判断;条件控制或–&#xff09;{ ​ //代码语句 } 1、首先执行初始话语句&#xff0c;给变量一个起始的值 2、条件判断进行判断&#xff0c;为true&#xff0c;执行循环体中的代码语句 ​ …

人体感应提醒 大声公+微波模块

文章目录 模块简介接线程序示例 模块简介 微波感应开关模块 RCWL-0516是一款采用多普勒雷达技术&#xff0c;专门检测物体移动的微波感应模块。采用 2.7G 微波信号检测&#xff0c;该模块具有灵敏度高&#xff0c;感应距离远&#xff0c;可靠性强&#xff0c;感应角度大&#…

DOM型xss靶场实验

DOM型xss可以使用js去控制标签中的内容。 我使用的是一个在线的dom型xss平台&#xff0c;靶场链接&#xff1a;Challenges 第一关Ma Spaghet!&#xff1a; Ma Spaghet! 关卡 <h2 id"spaghet"></h2> <script>spaghet.innerHTML (new URL(locatio…

【QT5】<应用> 小游戏:贪吃蛇

文章目录 一、项目要求 二、需求分析 三、实现效果 四、代码 一、项目要求 【1】主要实现&#xff1a;游戏界面存在一条蛇&#x1f40d;&#xff0c;使用键盘wsad或者↑↓←→键盘可以控制蛇的行走方向。同时界面中会随机出现食物&#xff0c;蛇可以吃食物&#xff0c;然后…

结构体(1)<C语言>

导言 结构体是C语言中的一种自定义类型&#xff0c;它的值&#xff08;成员变量&#xff09;可以是多个&#xff0c;且这些值可以为不同类型&#xff0c;这也是和数组的主要区别&#xff0c;下面将介绍它的一些基本用法&#xff0c;包括&#xff1a;结构体的创建、结构体变量的…

LeetCode714买卖股票的最佳时机含手续费

题目描述 给定一个整数数组 prices&#xff0c;其中 prices[i]表示第 i 天的股票价格 &#xff1b;整数 fee 代表了交易股票的手续费用。你可以无限次地完成交易&#xff0c;但是你每笔交易都需要付手续费。如果你已经购买了一个股票&#xff0c;在卖出它之前你就不能再继续购买…

鸿蒙北向开发 IDE DevEco Studio 3.1 傻瓜式安装闭坑指南

首先下载 安装IDE 本体程序 DevEco Studio 下载链接 当前最新版本是3.1.1,下载windows版本的 下载下来后是一个压缩包, 解压解锁包后会出现一个exe安装程序 双击运行安装程序 一路 next ( 这里涉及安装文件目录,我因为C盘够大所以全部默认了,各位根据自己情况选择自己的文件…

物证管理系统|DW-S404实现物证科学化管理

随着社会的进步和科技的发展&#xff0c;信息化和数字化已经成为各个行业的必然趋势。在众多领域中&#xff0c;物证管理系统逐渐受到广泛的关注和应用。 物证是公安机关处理案件的关键凭证&#xff0c;针对过去物证管理分散、损毁遗失等严重问题&#xff0c;集驰电子JIONCH推…

使用OpenCV dnn c++加载YOLOv8生成的onnx文件进行实例分割

在网上下载了60多幅包含西瓜和冬瓜的图像组成melon数据集&#xff0c;使用 EISeg 工具进行标注&#xff0c;然后使用 eiseg2yolov8 脚本将.json文件转换成YOLOv8支持的.txt文件&#xff0c;并自动生成YOLOv8支持的目录结构&#xff0c;包括melon.yaml文件&#xff0c;其内容如下…

数字校园的优势有哪些

数字化时代下&#xff0c;数字校园已成为教育领域一股显著趋势。数字校园旨在借助信息技术工具对传统校园进行改造&#xff0c;提供全新的教学、管理和服务方式。那么&#xff0c;数字校园究竟具备何种优势&#xff1f;现从三个方面为您详细介绍。 首先&#xff0c;数字校园为教…

平衡二叉树详解

目录 平衡二叉树的定义 平衡二叉树的基本操作 查找 插入 AVL树的建立 平衡二叉树的定义 平衡二叉树仍然是一棵二叉查找树&#xff0c;只是在其基础上增加了平衡的要求&#xff0c;也就是其左右子树的高度之差的绝对值不超过1。 在定义树的结构时需要加入一个变量height&…

使用树莓派和 L298N 来 DIY 小车底盘

树莓派小车可以作为 STEM&#xff08;科学、技术、工程、数学&#xff09;教育的工具&#xff0c;在实际操作中帮助学生理解和学习电子技术、编程和机器人原理。可以培养学生的动手能力、解决问题的能力和创新思维。 随着近年 AI 技术的高速发展&#xff0c;SLAM、VSLAM 甚至带…

SpringBoot+Vue图书管理系统(前后端分离)

技术栈 JavaSpringBootMavenMySQLMyBatisVueShiroElement-UI 角色对应功能 用户管理员 功能截图

STM32关于uc/OS-III的多任务程序

目录 一、UCOS-III源码获取 二、HAL库工程的建立 1.RCC配置 2.SYS配置 3.USART1配置 4.GPIO配置 5.时钟配置 6.项目配置 三、KEil文件添加 1.文件复制 2.KEil工程添加 3.添加文件路径 四、代码修改 1. 2.修改文件app_cfg.h中代码 3.修改include.h的代码 4.修改…

常见的api: BigInteger

一.获取一个大的随机整数 1.代码: BigInteger bd1 new BigInteger(4, new Random());System.out.println(bd1); 2.打印的结果:2 3.注释获取的是0-16之间的随机整数 二.获取一个指定的大的数 1.代码&#xff1a; BigInteger bd2 new BigInteger("100");System.o…

计网总结☞物理层

五层协议体系结构->各层的功能有&#xff1a; 物理层 物理层的任务就是尽可能地屏蔽传输媒体的差异&#xff0c;透明地传送比特流&#xff08;注意&#xff1a;传递信息的物理媒体&#xff0c;如双绞线、同轴电缆、光缆等&#xff0c;是在物理层的下面&#xff0c;当做第 0…

flink读取hive写入http接口

目录 0、创建hive数据 1、pom.xml 2、flink代码 3、sink 4、提交任务jar 5、flink-conf.yaml 6、数据接收 flink-1.17.2jdk1.8hive-3.1.3hadoop3.3.6passwordhttp0、创建hive数据 /cluster/hive/bin/beeline !connect jdbc:hive2://ip:10000 create database demo; d…

HPC: perf入门

如果你想查看你的程序在cpu上运行时&#xff0c;耗时时如何分布的&#xff0c;那么perf是一个合理的选择。 准备工作 为了支持使用perf&#xff0c;首先你要安装相关的库 sudo apt install linux-tools-5.15.0-67-generic此外&#xff0c;因为使用perf进行benchmark&#xf…

【C语言】预处理详解(上卷)

前言 预处理也是C语言中非常重要的存在。那么就详细地来了解一下吧。 预定义符号 C语言设置了一些预定义符号&#xff0c;可以直接使用&#xff0c;预定义符号也是在预处理期间处理的。 1 __FILE__ //进行编译的源文件 2 __LINE__ //文件当前的…

移动端 UI 风格,视觉盛宴

移动端 UI 风格&#xff0c;视觉盛宴