C++实现无重复字符的最长子串

作者:IT-菜鸟 时间:2023-11-02 22:49:00 

目录
  • 题目及要求:

  • 提示:

  • 原创代码:

  • 代码思路:

题目及要求:

给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。

提示:

0 <= s.length <= 5 * 104
s 由英文字母、数字、符号和空格组成

原创代码:


class Solution {
public:
   int lengthOfLongestSubstring(string s)
   {
       int begin=0;//每个当前子串的开头
       int end=0;//每个当前子串的末尾
       int value=0;//判断下一个字符是否属于当前子串
       int max=0;//记录历史字串的最大元素个数
       int now=0;//储存当前字串的元素个数
       string str;//代表当前字串
       if(s.size()==0)
       return 0;
       while(end<=(s.size()-1))
       {
           value=str.find(s[end],0);
           if(value!=-1)
           {
               str.erase(0,value+1);
               begin=end-(str.size()-value);
           }
           str.push_back(s[end]);
           now=str.size();
           max=now>max?now:max;
           end++;  
       }
       return max;
   }
};

 输出示例:
示例 1:
输入: s = “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
示例 2:
输入: s = “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
示例 3:
输入: s = “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。
示例 4:
输入: s = “”
输出: 0

代码思路:

首先:

定义变量


int begin=0;//每个当前子串的开头
int end=0;//每个当前子串的开头
int value=0;//判断下一个字符是否属于当前子串
int max=0;//记录历史字串的最大元素个数
int now=0;//储存当前字串的元素个数
string str;//代表当前字串

其次:
通过以下条件判断形参string s是否为空字符串


if(s.size()==0)
return 0;

再其次:
若形参string s不是空字符串,由于


int end=0;//每个当前子串的末尾

则用end来引入新元素,每判断一次新元素与当前子串的关系,则end++

最后:
若新元素与当前的关系表明新元素不与当前子串内的元素重复则直接将新元素加入子串,若新元素与当前的关系表明新元素与当前子串内的元素重复则将子串含有冲突元素的前半部分删除并将新元素加入到当前子串

反思所得:
在本次编程过程中我经常出现提示堆栈内存溢出的问题,之后发现是对形参string s是空字符串的情况没加以控制,在未来的编程中我会更加注意。
而且我还学会了利用条件运算符来记录记录历史字串的最大元素个数,即

max=now>max?now:max;

LeetCode链接:
https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/

来源:https://blog.csdn.net/qq_45816645/article/details/119155852

标签:C++,无重复,字符,最长子串
0
投稿

猜你喜欢

  • Android开发实现Launcher3应用列表修改透明背景的方法

    2023-09-28 08:45:27
  • C#之继承实现

    2023-04-10 16:51:41
  • C#编程自学之开篇介绍

    2023-12-16 07:58:55
  • Java main 方法面试题的详细整理

    2023-11-24 23:53:30
  • Java设计模式之单例模式简介

    2023-12-11 12:04:08
  • 详解Spring中bean的几种注入方式

    2023-02-12 20:25:07
  • Android实现分享功能

    2023-12-08 10:10:48
  • C和指针小结(推荐)

    2022-11-08 09:17:08
  • 将cantk runtime嵌入到现有的APP中的方法

    2021-12-04 06:06:09
  • c# socket网络编程接收发送数据示例代码

    2021-08-31 06:14:13
  • 使用java代码获取新浪微博应用的access token代码实例

    2023-12-01 20:18:30
  • 如何从eureka获取服务的ip和端口号进行Http的调用

    2021-07-05 05:28:13
  • Android实现3D云标签效果

    2022-06-05 10:33:50
  • 详解Eclipse提交项目到GitHub以及解决代码冲突

    2022-05-15 09:04:52
  • 一文带你学会Spring JDBC的使用

    2023-11-29 17:05:34
  • java自旋锁和JVM对锁的优化详解

    2022-03-02 07:05:33
  • IDEA类与方法注释模板设置图文教程(非常详细)

    2022-02-24 10:18:29
  • C#集合查询Linq在项目中使用详解

    2022-09-16 13:50:09
  • Java泛型中<?>和<T>的区别浅析

    2023-11-25 05:20:09
  • 关于@Scheduled不执行的原因分析

    2021-06-27 17:13:20
  • asp之家 软件编程 m.aspxhome.com