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

算法---字符串

一、算法说明

字符串是一种类型,他不是一种算法,所以我们在处理这方面的问题的时候,需要结合其他的算法

二、题目

最长公共前缀

1、题目

最长公共前缀

2、解题思路

解法一:我们可以先让两个相互比较,然后在将比较出来的公共前缀和下一个作比较

解法二:我们可以一次性比较所有的

3、代码实现

 

class Solution 
{
public:string longestCommonPrefix(vector<string>& strs){string r = strs[0];for(int i = 1; i<strs.size(); i++){r = FindCommmon(r,strs[i]);}return r;}string FindCommmon(string& r, string& x){int i = 0;while(i < min(r.size(), x.size())&&r[i]==x[i]){i++;}return r.substr(0,i);}
};

最长回文子串

 最长回文子串

(1)题目

(2)解题思路

中心扩展法:我们可以定义一个位子i,然后使用双指针,判断以i为中心的两侧是否相等,分为两种情况,一种是偶数对称即示例2,这是我们双指针的位置分别在 i,和i+1,如果是奇数对称,双指针的位置都在i

(3)代码实现

class Solution
{
public:string longestPalindrome(string s) {int begin = 0, len = 0;for (int i = 0; i < s.size(); i++) {int left = i;int right = i;while (left >=0 && right < s.size() && s[right] == s[left]){left--;right++;}if (right - left - 1 > len) {begin = left + 1;len = right - left - 1;}left = i ; right = i + 1;while (left >=0 && right < s.size() && s[right] == s[left]){left--;right++;}if (right - left - 1 > len) {begin = left + 1;len = right - left - 1;}}return s.substr(begin, len);}
};

字符串相乘

字符串相乘

 (1)题目

(2)解题思路

解题思路一:

1、模拟字符串

添加一个字符串,上面的字符串挨个乘以下面的字符串里面的数字,得到结果后相加

 2、高位相乘的时候,要补上0

   我们可以先将字符串逆序,然后我们会发现下标为几,就在前面加上几个‘0’

3、逆序

等到结果后先全部相加在逆序

4、处理前导’0‘

如果我们乘以的是一个字符'0'只需要保存一个’0‘

解题思路二 :

(3)代码实现

class Solution 
{
public:string multiply(string num1, string num2) {string ret;if(num1 == "0" || num2 == "0")return "0";reverse(num1.begin(),num1.end());reverse(num2.begin(),num2.end());for(int i = 0 ; i < num1.size(); i++){string tmp;int k = i;while(k--){tmp.push_back('0');} int add = 0;for(int j = 0 ; j < num2.size() ; j++){int re = ((num1[i] - '0')*(num2[j] - '0') + add) ;add = re/10;char s = re%10 + '0';tmp.push_back(s);}if(add!=0){tmp.push_back(add+'0');}ret =  Addstring(tmp , ret);} reverse(ret.begin(),ret.end());return ret;}string Addstring(string s1, string s2){int i = 0, j = 0, add = 0;string ans;while (i < s1.size() || j < s2.size() || add > 0) {int sum = add;if (i < s1.size())sum += s1[i++] - '0';if (j < s2.size())sum += s2[j++] - '0';ans.push_back((sum % 10) + '0');add = sum / 10;}return ans;}
};

http://www.dtcms.com/a/356969.html

相关文章:

  • Speculation Rules API
  • PDF转图片工具实现
  • 天气查询系统
  • 2025_WSL2_Ubuntu20.04_C++20_concept 环境配置
  • el-select多选下拉框出现了e611
  • MySQL 中ORDER BY排序规则
  • 物联网平台中的Swagger(二)安全认证与生产实践
  • Socket编程核心API与结构解析
  • 【C++】掌握类模板:多参数实战技巧
  • 构筑沉浸式3D世界:渲染、资源与体验的协同之道
  • 云计算学习笔记——逻辑卷管理、进程管理、用户提权RAID篇
  • N32G43x Flash 驱动移植与封装实践
  • DBeaver 的 PostgreSQL 驱动包默认存储位置
  • 序列化和反序列的学习
  • 移动社交时代电商流量获取新路径:基于社群与开源AI智能名片链动2+1模式S2B2C商城小程序的探索
  • 【基础-单选】关于Button组件,下面哪个样式是胶囊型按钮
  • 大模型之RAG, 检索增强生成
  • 【若依】RuoYi-Vue-springboot3分离版
  • RS485、RS232、RS422协议
  • 浔川代码编辑器v2.1.0公测版上线时间公告
  • 基于FPGA的DDR3读写实验学习
  • LeetCode算法日记 - Day 26: 归并排序、交易逆序对的总数
  • 河南葱香鸡蛋,嫩滑香浓超棒!
  • 企业微信如何设置长期有效的获客二维码?3步生成!
  • 机器人视觉检测
  • 决胜财报季,证券投研如何实现财报自动化分析录入?
  • 企微智能表格对接业务系统
  • 指纹手机技术:破解亚马逊多账号运营痛点的底层逻辑与实践
  • useEffect中直接使用 await报错
  • 直流电机驱动与TB6612