leecode刷题 Longest Substring Without Repeating Characters

2023-05-16

1、Two Sum
Given an array of integers, return indices of the two numbers such that they add up to a specific target.
You may assume that each input would have exactly one solution, and you may not use the same element twice.
Example:

Given nums = [2, 7, 11, 15], target = 9,

Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].

 

#include <iostream>
#include <stddef.h>
using namespace std;

int* twosum(int arr[],int target,int len)
{
	int result[2]= {0};
	
	if(len > 1)
	{
	    for(int i = 0;i<len;i++)
		{
		    for(int j=i+1;j<len;j++)
			{
			    if(arr[i]+arr[j] == target)
				{
					cout<<"arr[i]= "<<arr[i]<<endl;
					cout<<"arr[j]= "<<arr[j]<<endl;
				    result[0]=arr[i];
					result[1]=arr[j];
				}
			}
		}
	}
	return result;

}

int main()
{
	int arr[] = {2,5,7,3,9,1};
    int target = 10;
	int len = sizeof(arr)/sizeof(int);
	cout<<len<<endl;
	//cout<<target<<endl;
	twosum(arr,target,len);
    return 0;
}

3、Longest Substring Without Repeating Characters
Description:
Given a string, find the length of the longest substring without repeating characters.

Examples:

Given "abcabcbb", the answer is "abc", which the length is 3.

Given "bbbbb", the answer is "b", with the length of 1.

Given "pwwkew", the answer is "wke", with the length of 3. 
 

思路:记录最长字串的起始位置p1和结束位置p2,使用count来记录字串的长度

#include <iostream>
#include <string>
#include <set>
using namespace std;

int lengthOfLongestSubstring(string str)
{
    
	string sub_str;
	int len =str.length();
	int p1=0,p2=0;
	int count = 0;
	for(int i = 0;i<len;i++)
	{
		string str_temp="";
	    for(int j = i+1;j<len;j++)
		{
		    if(str.at(i) != str.at(j) && str.at(j-1) != str.at(j))
			{
				if(str_temp.find(str.at(j)))//这是为了保证从j开始的位置后面的字符中没有重复出现字符
				{
					str_temp.push_back(str.at(j));//如果没有找到,就把字符加进来
				}else{
					cout<<"str_temp="<<str_temp<<endl;
					break;//如果找到这个字符
				}
			
			    if(count<(j-i))
				{
					count = j-i;
					p1 = i;
					p2 = j;
				}
			}
			else{
				
			    break;
			}
			
		}
	}
	cout<<"p1 = "<<p1<<endl;
	cout<<"p2 = "<<p2<<endl;
	cout<<"count = "<<count+1<<endl;
	if(count == 0)
	{
		sub_str.assign(str,0,1);
	}else{
	
	sub_str.assign(str,p1,p2-p1+1);
	}
	cout<<"sub_str = "<<sub_str<<endl;
	return 0;

}

int main()
{
	string str1 ="abcabcbb";
	string str2 ="bbbbb";
	string str3 ="1234pwwkew";
	//string str3 ="pwwkew";
	lengthOfLongestSubstring(str1);
	cout<<"____________"<<endl;
	lengthOfLongestSubstring(str2);
	cout<<"____________"<<endl;
	lengthOfLongestSubstring(str3);
	
	
    return 0;
}

运行结果:

str_temp=bc
p1 = 0
p2 = 2
count = 3
sub_str = abc
____________
p1 = 0
p2 = 0
count = 1
sub_str = b
____________
p1 = 0
p2 = 5
count = 6
sub_str = 1234pw

其实上面的程序是有bug的leecode上测试没有通过,需要下面一样来修改。 

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int len =s.length();
        int p1=0,p2=0;
        int count = 0;
        if(len == 0)
        {
            return 0;
        }
       
        for(int i = 0;i<len;i++)
        {
            string str_temp="";
            for(int j=i+1;j<len;j++)
            {
                if(s.at(i) != s.at(j) && s.at(j-1) != s.at(j))
                {
                     std::size_t found = str_temp.find(s.at(j));
                   if (found == std::string::npos)  //如果没找到就加入str_temp进去
                    {
                        str_temp.push_back(s.at(j));
                    }else{
                        break;//如果找到说明重复了
                    }

                    if(count<(j-i))
                    {
                        p1 = i;
                        p2 = j;
                        count =j-i;
                    }

                }else{
                    break;
                }
            }
        }

        if(count == 0)
        {
            return 1;
        }else{
            return count+1;
        }
    }
};

 

题目:给出一个数组代表围柱的高度,求能围柱的最大的水量,例如数组{ 5,2,3,2,4 },最大水量为5。

如下图:黄色部分为围柱,绿色部分是能够围住的水,图中围柱的高度依次为 5,2,3,2,4最多能围住的水量是5。


思路:求出每个柱子上面能够存多少水,然后将每根柱子的存水量相加便能得到总的存水量,为求出每根柱子上能够存多少水,就要求出每根柱子左边最高的和右边最高柱子,然后用两者的最小值减去当前柱子的高度。 例如图中从左到右第二根柱子的高度为2,它左边最高柱子的值为5,右边最高柱子的值为4,因此它的最大存水量为 Min(4,5)-2=2。


 

上面算法的流程:
①从左到右遍历一次求出每个元素左边的最大值,保存在 left 数组中。
②从右到左遍历一次求出每个元素右边的最大值,保存在right数组中。
③最后一次遍历求出每个元素(每根柱子)的存水量。

 

 

53. 最大子序和

难度简单2005

给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

示例:

输入: [-2,1,-3,4,-1,2,1,-5,4],
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。

进阶:

如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。

思路:

原来的数组:       [-2,1,-3,4,-1,2,1,-5,4]

                                 i

计算后的数组 v1  [-2 ,1,-2,4,3,5,6,1,5]

   思路:                -2=-2 、1=-2+1 、 -2 =1 + -3  、 4 =4 、 3 = 4+-1   、...

如果数组长度大于1

先把源数组第一位插入到v1中,

如果v1数组的第i-1为数是正数,那么v1数组的第i个元素= 源数组的第i个元素 + v1数组的第i-1个元素

如果v1数组的第i-1为数是负数,那么v1数组的第i个元素= 源数组的第i个元素

这样下面一个数组v1的最大值,就是源数组的最大连续子序列之和。

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        vector<int> v1;
        int len = nums.size();
        if(len == 1)
        return nums[0];

        if(len > 0)
        {
            v1.push_back(nums[0]);
           for(int i = 1;i<len;i++)
           {
              if(v1[i-1]>0)
              {
                  v1.push_back(v1[i-1]+nums[i]);
              }else{
                  v1.push_back(nums[i]);
              }
           }

           int max = -999;
           for( auto i : v1)
           {
               if(max < i)
               {
                   max =i;
               }

           }
           return max;

        }else
        {
            return 0;
        }


        
    }
};

 

 

67. 二进制求和

难度简单369

给你两个二进制字符串,返回它们的和(用二进制表示)。

输入为 非空 字符串且只包含数字 1 和 0

 

示例 1:


输入: a = "11", b = "1"
输出: "100"  

示例 2:


输入: a = "1010", b = "1011"
输出: "10101"  

 

提示:

  • 每个字符串仅由字符 '0' 或 '1' 组成。
  • 1 <= a.length, b.length <= 10^4
  • 字符串如果不是 "0" ,就都不含前导零。
class Solution {
public:
    string addBinary(string a, string b) {

    int len1= a.size()-1;
	int len2 = b.size()-1;
	
	while(len1 > len2)//把a和b长度修改成一样的,前面用0补
	{
	    b='0'+b;
		len2++;
	}
	
	while(len2 > len1)
	{
	    a='0'+a;
		len1++;
	}
	
	string result;
	int flag =0;//进位标志
	for(int i=len1;i>=0;i--)
	{
	    if((a[i]-'0'+b[i]-'0'+flag)==0)
		{
		    result = '0'+result;
		    flag = 0;
		}else if((a[i]-'0'+b[i]-'0'+flag)==1)
		{
		    result = '1'+result;
		    flag = 0;
		}else if((a[i]-'0'+b[i]-'0'+flag)==2)
		{
		    result = '0'+result;
		    flag = 1;
		}else if((a[i]-'0'+b[i]-'0'+flag)==3)
		{
		    result = '1'+result;
		    flag = 1;
		}
	}
	if(flag == 1)
	{
	    result = '1'+result;
	}
	
	return result;
	
}
};

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

leecode刷题 Longest Substring Without Repeating Characters 的相关文章

  • SQL:用查询分割逗号分隔的字符串列表?

    这是我的表结构 id PaymentCond 1 ZBE1 AP1 LST2 CC1 2 VB3 CC1 ZBE1 我需要拆分列PaymentCond 并且很乐意通过简单的 sql 查询来做到这一点 因为我不知道如何使用函数并且希望保持一切
  • 批处理文件:查找子字符串是否在字符串中(不在文件中)

    在批处理文件中 我有一个字符串abcdefg 我想检查一下是否bcd是在字符串中 不幸的是 我找到的所有解决方案似乎都在搜索file对于子字符串 而不是对于子字符串的字符串 有一个简单的解决方案吗 是的 您可以使用替换并检查原始字符串 if
  • PHP regex - 检测未闭合的括号

    我需要检测字符串是否包含任何未闭合的尖括号 我试图通过比较左括号和右括号的数量来避免使用正则表达式 if substr count string lt substr count string gt Text contains unclose
  • PowerShell 中的子字符串截断字符串长度

    是否可以在 PowerShell 中截断字符串 使用SubString 达到给定的最大字符数 even如果原始字符串已经存在shorter 例如 foreach str in hello good morning hi str subStr
  • 如何创建读取一个文件并将子字符串写入另一个文件的批处理文件?

    我目前有一个导出的文本文件 output txt 来自我需要解析的 Clear Case 命令 它看起来像这样 Comparing the following R1 PROD V1 VOB pvob R2 PROD V1 VOB pvob
  • 检查字符串是否包含 Velocity 中的特定子字符串

    在 Velocity 中 我有一个名为 url 的变量 其中包含以下字符串 ContentId 2 7507 ContentId 2 7508 ContentId 1 44551 我想检查该字符串是否包含子字符串 1 44551 这是我到目
  • 在Java中查找字符串中子字符串的第二次出现

    我们得到一个字符串 比如说 itiswhatitis 和一个子串 比如说 is 我需要找到的索引 i 当字符串 is 在原始字符串中第二次出现 String indexOf is 在这种情况下将返回 2 在这种情况下我希望输出为 10 使用
  • Python:如何从列表中检查字符串中的子字符串? [复制]

    这个问题在这里已经有答案了 如何检查字符串中列表中包含的子字符串 例如检查字符串是否包含 字符串 列表中的元素 https stackoverflow com questions 500925 但是在 Python 中呢 试试这个测试 an
  • C# 中的子字符串单词

    我想获取子串XXX and ZZZ来自我在 c 中的结果文本文字形式 XXX ZZZ WWW but Result LastIndexOf 不影响 因为我有 char 表示单独的两个单词 我找不到第一个和第二个的索引 用我的话说就是 cha
  • 缩短(限制)句子的长度

    我有一列很长的名字 我想把它们剪到最大40 个字符长度 样本数据 x lt c This is the longest sentence in world so now just make it longer No in fact this
  • 是否可以在 CSS 中设置子字符串的样式?

    我想强调字符串的最后 3 个字符 例如 123456789 很容易将最后三个包裹起来 strong or span class 但我想知道是否可以仅使用 CSS 来完成 所以 html 会是这样的 span class mytext 123
  • 在 MySQL 条件中使用子字符串

    我正在尝试获取一个人名字的第一个字母等于的所有实例P 这是我想出的 它不会返回任何内容 sql SELECT FROM people WHERE SUBSTRING FirstName 0 1 P 建议 您的表达式不起作用的原因是 subs
  • Databinder.Eval 和 Substring

    我使用中继器控件和数据绑定器将数据库中的数据显示到我的网站 示例 DataBinder Eval Container DataItem title 有时文字太长 通常我使用子字符串来显示首选字符串的长度 但是我如何使用数据绑定器做到这一点
  • 从Python中的一行中提取特定的子字符串

    我有一个包含多行格式的文件 格式如下 DIV ID 0X78800009 EXT LOS ANGELES TY STANDARD OWN 0X74400002 ABBR LA 我需要提取 EXT 值 但只提取引号中的部分 我目前正在使用这个
  • 正则表达式:对 url 字符串的两个斜杠之间的倒数第二个值进行子串

    我有一个像这样的字符串 http www example com value 1234 different value 我怎样才能提取1234 注意 末尾可能有斜杠 http www example com value 1234 diffe
  • 如何使用 javascript 在 getSelection() 中查找所选文本的索引?

    我正在尝试将样式应用于用户选择的文本 鼠标拖动 为此我需要获取所选文本的开始和结束索引 我尝试过使用 indexOf 方法 但它返回所选子字符串的第一次出现 我想要子字符串相对于原始字符串的实际位置 例如 如果我选择位置 3 处的字母 O
  • 在 python 中提取和解码字符串化字节字符串?

    我有这样的字符串 其中有一个字符串化的字节子字符串 如下所示 some string b Hurricane Mitch n 提取嵌套 b 字符串以便我可以用 utf8 正确解码它的最佳方法是什么 最直接的方法 仍然比您需要的更强大 但可能
  • 如何使用子字符串删除字符串(文件名)的结尾?

    我知道我必须使用 Substring 来删除 但我不知道该怎么做 我需要像这样删除字符串末尾 from C Users myname Pictures shoeImage jpg to C Users myname Pictures 使用以
  • 查找最长可能重复字符串的实用程序

    是否有任何工具或实用程序或 perl python 脚本可以在大型文本文件中找到最长的重复子字符串并打印这些模式以及每个模式出现的次数 http en wikipedia org wiki Longest repeated substrin
  • str.find 怎么这么快?

    我之前遇到过一个问题 我在迭代字符串并使用切片时寻找子字符串 原来这是一个really关于性能的坏主意 str find速度要快得多 但我不明白为什么 import random import string import timeit Ge

随机推荐