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

目录
  • 题目及要求:
  • 提示:
  • 原创代码:
  • 代码思路:

题目及要求:

给定一个字符串 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/

到此这篇关于C++实现无重复字符的最长子串的文章就介绍到这了,更多相关C++ 无重复字符的最长子串内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C++实现leetcode(3.最长无重复字符的子串)

    [LeetCode] 3. Longest Substring Without Repeating Characters 最长无重复字符的子串 Given a string, find the length of the longest substring without repeating characters. Example 1: Input: "abcabcbb" Output: 3 Explanation: The answer is "abc", wit

  • Python3 无重复字符的最长子串的实现

    题目: 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例: 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3. 示例 2: 输入: "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1. 示例 3: 输入: "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是 &quo

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

    目录 题目及要求: 提示: 原创代码: 代码思路: 题目及要求: 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度. 提示: 0 <= s.length <= 5 * 104 s 由英文字母.数字.符号和空格组成 原创代码: class Solution { public: int lengthOfLongestSubstring(string s) { int begin=0;//每个当前子串的开头 int end=0;//每个当前子串的末尾 int value=0;//

  • C#算法之无重复字符的最长子串

    题目 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3. 示例 2: 输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1. 示例 3: 输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "wke"

  • C++实现LeetCode(159.最多有两个不同字符的最长子串)

    [LeetCode] 159. Longest Substring with At Most Two Distinct Characters 最多有两个不同字符的最长子串 Given a string s , find the length of the longest substring t  that contains at most 2 distinct characters. Example 1: Input: "eceba" Output: 3 Explanation: ti

  • python3实现字符串的全排列的方法(无重复字符)

    最近在学一些基础的算法,发现我的数学功底太差劲了,特别是大学的这一部分,概率论.线性代数.高数等等,这些大学学的我是忘得一干二净(我当时学的时候也不见得真的懂),导致现在学习算法,非常的吃力.唉!不说了,补习中... 抛出问题 求任意一个字符串的全排列组合,例如a='123',输出 123,132,213,231,312,321.(暂时假定字符串没有重复) 解决方案 目前有两种解决的方法 方法一: def str_sort(s=''): if len(s) <= 1: return [s] st

  • Go Java算法之K个重复字符最长子串详解

    目录 至少有K个重复字符的最长子串 方法一:分治(Java) 方法二:滑动窗口(go) 至少有K个重复字符的最长子串 给你一个字符串 s 和一个整数 k ,请你找出 s 中的最长子串, 要求该子串中的每一字符出现次数都不少于 k .返回这一子串的长度. 示例 1: 输入:s = "aaabb", k = 3 输出:3 解释:最长子串为 "aaa" ,其中 'a' 重复了 3 次. 示例 2: 输入:s = "ababbc", k = 2 输出:5

  • Python查找最长不包含重复字符的子字符串算法示例

    本文实例讲述了Python查找最长不包含重复字符的子字符串算法.分享给大家供大家参考,具体如下: 题目描述 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度.例如在"arabcacfr"中,最长的不包含重复字符的子字符串是"acfr",长度为4 采用字典的方法,最后输出所有最长字符的列表 算法示例: # -*- coding:utf-8 -*- #! python3 class Solution: def __init__(self):

  • 用位图排序无重复数据集实例代码(C++版)

    <Programming Pearls>(编程珠玑下载)第一章讲述了如何用位图排序无重复的数据集,整个思想很简洁,今天实践了下. 一.主要思想 位图排序的思想就是在内存中申请一块连续的空间作为位图,初始时将位图的每一位都置为0,然后依次读取待排序文件的整数,将整数所在的位设置为1,最后扫描位图,如果某一位为1,则说明这个数存在,输出到已排序文件.比如待排序的数据S={3,0,4,1,7,2,5},max(S)=7,我们可以设置一个八位的位图B,将位图的每一位初始为0,即B=[0,0,0,0,0

  • .net中string无重复数字的实现方法

    复制代码 代码如下: //string strText = "1334677999";实现无重复        public static string qu(string lab)        {            string strResult = string.Empty;            for (int intIdx = 0; intIdx < lab.Length; intIdx++)            {                if (st

随机推荐