专题十一_字符串

news2024/11/18 19:28:48

目录

14. 最长公共前缀

解析

题解

5. 最长回文子串

解析

题解

67. 二进制求和

解析

题解

43. 字符串相乘

解析

题解


14. 最长公共前缀

14. 最长公共前缀 - 力扣(LeetCode)

 

 

解析

题解

解法一:两两比较,横向比较

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        // 65.专题十一_字符串_最长公共前缀_C++
        // 两两比较,横向比较
        if(strs.size() == 0) return "";
        if(strs.size() == 1) return strs[0];
        string ret = strs[0];
        for(int i = 1; i < strs.size(); ++i)
            ret = findCommon(ret, strs[i]);
        return ret;        
    }
    string findCommon(const string& s1, const string& s2)
    {
        int index = 0;
        while(index < min(s1.size(), s2.size()))
        {
            if(s1[index] == s2[index]) index++;
            else break;
        }
        return s1.substr(0, index);
    }
};

解法二:纵向对比

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        // 65.专题十一_字符串_最长公共前缀_C++
        // 解法二:纵向对比
        for(int i = 0; i < strs[0].size(); ++i)
        {
            char tmp = strs[0][i];
            for(int j = 1; j < strs.size(); ++j)
            {
                if(i == strs[j].size() || tmp != strs[j][i])
                    return strs[0].substr(0, i);
            }
        }
        return strs[0];
    }
};

5. 最长回文子串

5. 最长回文子串

 

 

解析

题解

方法一:动态规划

class Solution {
public:
    string longestPalindrome(string s) {
        // 36.回文串问题_最长回文串_C++
        // 方法一:动态规划
        // 1.创建dp表
        // 2.初始化
        // 3.填表
        // 4.返回值
        int n = s.size();
        vector<vector<bool>> dp(n, vector<bool>(n));

        int len = 1, begin = 0;
        for(int i = n - 1; i >= 0; --i)
        {
            for(int j = i; j < n; ++j)
            {
                if(s[i] == s[j]) dp[i][j] = i + 1 < j ? dp[i+1][j-1] : true;
                if(dp[i][j] && j - i + 1 > len) begin = i, len = j - i + 1;
            }
        }
        return s.substr(begin, len);
    }
};

方法二:中心扩展算法

class Solution {
public:

    string longestPalindrome(string s) {
        // 66.专题十一_字符串_最长回文子串_C++
        // 方法二:中心扩展算法
        int begin = 0, len = 0, n = s.size();
        for(int i = 0; i < n; ++i) // 依次枚举所有的中点
        {
            // 先做一次奇数长度的扩展
            int left = i, right = i;
            while(left >= 0 && right < n && s[left] == s[right])
            {
                right++;
                left--;
            }
            if(right - left - 1 > len)
            {
                begin = left + 1;
                len = right - left - 1;
            }
            // 再做一次偶数长度的扩展
            left = i, right = i + 1;
            while(left >= 0 && right < n && s[left] == s[right])
            {
                right++;
                left--;
            }
            if(right - left - 1 > len)
            {
                begin = left + 1;
                len = right - left - 1;
            }

        }
        return s.substr(begin, len);
    }
};

67. 二进制求和

67. 二进制求和

解析

 

题解

class Solution {
public:
    string addBinary(string a, string b) {
        // 67.专题十一_字符串_二进制求和_C++
        string ret;
        int cur1 = a.size() - 1, cur2 = b.size() - 1, t = 0; // 进位
        while(cur1 >= 0 || cur2 >= 0 || t)
        {
            if(cur1 >= 0) t += a[cur1--] - '0';
            if(cur2 >= 0) t += b[cur2--] - '0';
            ret.push_back(t % 2 + '0');
            t /= 2;
        }
        reverse(ret.begin(), ret.end());    // 插入的结果是倒着的
        return ret;
    }
};

43. 字符串相乘

43. 字符串相乘

 

 

解析

 

题解

class Solution {
public:
    string multiply(string num1, string num2) {
        // 68.专题十一_字符串_字符串相乘_C++
        // 解法二:先无进位相乘然后相加,最后处理进位
        // 1.准备工作
        int m = num1.size(), n = num2.size();
        reverse(num1.begin(), num1.end());
        reverse(num2.begin(), num2.end());
        vector<int> tmp(m + n - 1);

        // 2.先无进位相乘然后相加
        for(int i = 0; i < m; ++i)
            for(int j = 0; j < n; ++j)
                tmp[i + j] += (num1[i] - '0') * (num2[j] - '0');
        
        // 3.处理进位
        int cur = 0, t = 0;
        string ret;
        while(cur < m + n - 1 || t != 0)
        {
            if(cur < m + n - 1) t += tmp[cur++];
            ret += t % 10 + '0';
            t /= 10;
        }

        // 4.处理前导0
        while(ret.size() > 1 && ret.back() == '0') ret.pop_back();

        reverse(ret.begin(), ret.end());
        return ret;
    }
};

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

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

相关文章

苹果手机录屏没有声音怎么办?2招教你快速解决

今天&#xff0c;录屏功能已成为了我们工作和娱乐中的得力助手。苹果手机凭借其卓越的性能和丰富的功能&#xff0c;自然也在录屏方面有着不俗的表现。苹果手机自带的录屏功能简单直观&#xff0c;能够轻松记录屏幕的精彩瞬间。 然而&#xff0c;有时候苹果手机录屏没有声音怎…

案例:使用Haproxy搭建Web集群

目录 Haproxy Haproxy和LVS的区别 LVS Haproxy 代理和调度的区别 Haproxy调度算法原理 案例 拓扑图 Web服务器配置 Haproxy配置 安装Haproxy Haproxy初步设置 Haproxy配置 配置文件各行说明 监听项配置 启动Haproxy 测试 配置Haproxy日志 Haproxy Haproxy是…

定点数的实现

定点数实现的是float转PEint /// 浮点数有很多问题 多个平台一些运算结果不一致 /// 定点数 运算 &#xff08;把浮点数转为定点数进行运算&#xff0c;保证所有平台结果的一致性&#xff09; //因为要把float转化为整形来操作 //float是一个结构体 所以我们这里也是…

[图解]阿西莫夫·台球杀人事件-《分析模式》漫谈

1 00:00:00,470 --> 00:00:02,510 今天的《分析模式》漫谈 2 00:00:02,760 --> 00:00:06,700 我们来说一个有趣的台球杀人事件 3 00:00:08,640 --> 00:00:09,630 还是第一章 4 00:00:09,920 --> 00:00:12,020 这里有一句&#xff0c;you would 5 00:00:12,030 …

【docker快捷部署系列二】用docker-compose快速配置多个容器,docker部署Springboot+Vue项目和mysql数据库

1、思路 docker部署项目是将项目的不同程序放入不同容器中运行&#xff0c;这样可以方便管理不同程序。我的项目有Springboot、Vue、mysql三部分&#xff0c;Vue用nginx代理&#xff0c;因为nodejs太占空间了。一开始我是用Dockerfile创建镜像再运行容器的&#xff0c;但发现它…

uniapp点击图片预览,关闭预览图片后自动触发onshow生命周期,怎么解决?

第一&#xff0c;页面的数据会实时更新&#xff0c;所以接口请求需要在onshow中&#xff0c;变量figh初始为true&#xff0c;数据列表信息可直接调用获取 当点击查看图片时改变&#xff0c;变量figh为false&#xff0c;此时onshow里面的this.postlist()不触发。 此时&#xff0…

Linux/C 高级——Linux命令

从这里开始&#xff0c;我们展开对Linux/c 高级的学习&#xff0c;首先介绍的是在Linux/c高级中&#xff0c;Linux的部分 目录 1.Linux简介 1.1Linux起源 1.2查看系统版本命令 1.3分层结构 1.4系统关机重启命令 2.Linux安装工具 2.1软件包安装 2.1.1软件包的管理机制 …

FastAdmin默认表单中显示列表

FastAdmin表单中又列表&#xff0c;例如订单下有好几个商品需要进行显示&#xff0c;其他字段用系统默认表单样式。 <div class"form-group"><label class"control-label col-xs-12 col-sm-2">{:__(商品详情)}:</label><div class&qu…

升级 chatGPT plus 成功丨出海笔记

有图有真相(升级了速度真的爽)&#xff0c;这个过程说简单不简单&#xff0c;说难不难&#xff0c;废话不说&#xff0c;直接上干货&#xff1a; 支付的时候老说你的卡decline或者被拒绝&#xff0c;就是环境原因。 关键点 换什么IP都没用&#xff0c;本地环境怎么切换都不行&…

java——泛型和JUnit

1、泛型的理解和好处 1.1、使用传统方法的问题分析 1、不能对加入到集合 ArrayList中的数据类型进行约束(不安全) 2、遍历的时候&#xff0c;需要进行类型转换,如果集合中的数据量较大&#xff0c;对效率有影响 1.2、泛型的好处 1、编译时&#xff0c;检查添加元素的类型&…

FreeRTOS学习 -- 事件标志组

一、事件标志组简介 1、事件位&#xff08;事件标志&#xff09; 事件位用来表明某个事件是否发生&#xff0c;事件位通常用作事件标志&#xff0c;比如下面的几个例子&#xff1a; 当收到一条消息并且把这条消息处理掉以后就可以将某个位&#xff08;标志&#xff09;置1&a…

阅读台灯什么品牌好?一文带你了解热门阅读台灯推荐

阅读台灯最终都绕不开护眼这个话题。护眼灯作为保护视力的辅助工具&#xff0c;以有效护眼的价值深受大众青睐。学生长时间用眼&#xff0c;普通台灯的伤害大&#xff0c;而阅读台灯的出现&#xff0c;通过其先进的技术和设计&#xff0c;能为学生提供了一个既舒适又健康的照明…

十三、代理模式

文章目录 1 基本介绍2 案例2.1 Sortable 接口2.2 BubbleSort 类2.3 SortTimer 类2.4 Client 类2.5 Client 类的运行结果2.6 总结 3 各角色之间的关系3.1 角色3.1.1 Subject ( 主体 )3.1.2 RealObject ( 目标对象 )3.1.3 Proxy ( 代理 )3.1.4 Client ( 客户端 ) 3.2 类图 4 动态…

vue3学习day04-provide和inject、defineOptions、defineModel、Pinia、pinia持久化

15、provide和inject &#xff08;1&#xff09;作用&#xff1a;顶层组件向任意的底层组件传递数据和方法&#xff0c;实现跨层组件通信 &#xff08;2&#xff09;语法&#xff1a; 1&#xff09;顶层组件通过provide函数提供数据 2&#xff09;底层函数提供inject获取数据…

封装el-table 基于element封装可配置JSON表格组件

基于element封装可配置JSON表格组件 话不多说直接贴代码&#xff0c;复制运行即可查看效果 子组件全部代码 <template><div class"custom-table"><el-table:data"tableData"borderstyle"width: 100%"size"mini"max-h…

[AI绘画] 简明原生 ComfyUI 三重超细节放大教程(附工作流)

本教程将从0构建 ComfyUI 三重细节填充放大工作流&#xff0c;人有多大胆&#xff0c;图有多大产 **&#xff08;建议横屏&#xff09;**鬼灭之刃 堕姬 & 甘露寺蜜璃 三重细节填充放大 16K(154888832) 「四种放大」 ”潜空间“和”像素空间”&#xff0c;图像放大可…

精通C++ STL(三):vector的介绍及使用

目录 vector的介绍 vector的使用 vector的定义方式 vector的空间增长问题 size和capacity reserve和resize empty vector的迭代器使用 begin和end rbegin和rend vector的增删查改 push_back和pop_back insert和erase swap 元素访问 vector迭代器失效问题 迭代器失效问题举例 …

vue3+Vite实现滑动拼图验证

参考文档&#xff1a;https://github.com/javaLuo/vue-puzzle-vcode/blob/master/README3.md 最近想学习一下这个前端滑动拼图的实现&#xff0c;就找了一个第三方库&#xff0c;该库支持vue2和vue3两个版本&#xff0c;直接看文档就能上手&#xff0c;我自己跑了一边倒&#…

武汉流星汇聚:青少年为何钟情亚马逊?一站式购物与信任铸就魅力

在当今这个数字化时代&#xff0c;青少年的消费习惯正以前所未有的速度演变&#xff0c;他们不仅是未来的消费主力军&#xff0c;更是推动市场变革的重要力量。令人瞩目的是&#xff0c;Piper Sandler最新发布的青少年消费研究报告揭示了一个引人注目的现象&#xff1a;超过半数…

快速下载大模型的方法

现在&#xff0c;每天都有各种大模型不断涌现&#xff0c;这些模型文件通常都很大。如何快速又靠谱地下载这些开源大模型&#xff0c;放到我们的环境中&#xff0c;进行后续的微调、量化和部署工作呢&#xff1f;以下是我的一些经验分享。 准备 Docker 基础环境 首先&#xf…