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

Leetcode 3 最长不重复字符串

    • 题目
    • 动态规划方法
    • 思路

题目

3. Longest Substring Without Repeating CharactersGiven a string, find the length of the longest substring without repeating characters.Example 1:
Input: "abcabcbb"
Output: 3 
Explanation: The answer is "abc", with the length of 3. Example 2:
Input: "bbbbb"
Output: 1
Explanation: The answer is "b", with the length of 1.Example 3:
Input: "pwwkew"
Output: 3
Explanation: The answer is "wke", with the length of 3. Note that the answer must be a substring, "pwke" is a subsequence and not a substring.

动态规划方法

其实就是f(n)=f(n-1)+1,但是需要加入一个限制 index - lastIndex

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

 class Solution {public int lengthOfLongestSubstring(String s) {int[] dp=new int[s.length()];if(s.length()== 0){ //空的时候“”return 0;}//dp[n]代表以数组下表为n位置结尾时 最长不重复子串,dp[0]=1,new dp[n]dp[0]=1;//只有一个元素 返回1int maxlength=1; //排除空的 最低1for(int i=1;i<s.length();i++){int j=i-1;while(j>=0&&s.charAt(j)!=s.charAt(i)){//j>=0j--;} //j就是前一个重复的字符串的index// 通过比较dp[i-1]+1,i-j的大小 就可以比较出来最后一个字符是否有重复//1、如果dp[i-1]+1>i-j,那么dp[i-1]+1有重复 选i-j//2、如果dp[i-1]+1<i-j,那么dp[i-1]+1没有重复 选dp[i-1]+1dp[i]=Math.min(dp[i-1]+1,i-j); // dp[j - 1] +1 =dp[j]maxlength=Math.max(maxlength,dp[i]);//找最大的}return maxlength;}
}

思路

1先把字符串长度为0,1时的情况列出来
2设变量j=1;j<s.size
用于遍历总体字符串的循环,当size=1时j的取值为0,因为当size的取值大于1时,j的取值应该为1才对,故j的初值取值为1;
3变量k=mark;k<j
(用于遍历不重复字符串的循环)不重复字符串最左边 mark,最右边j-1
4 设变量mark=0 mark的更新为k+1
(用于标志不重复字符串的初始值,在不重复字符串时若发现出现值相等的状况,则更新该mark的值为k+1)

举例::abcad 已有不重复字符串abc 此时j=4 for(k=mark;k<4;k++)
当循环到k=0时出现相等的状况(此时设mark=k+1于是不重复字符串变为bca)(相当于舍去k时的那个重复的值)
5然后用j-mark更新当前max的值

class Solution {
public:int lengthOfLongestSubstring(string s) {if(s.size()==0){return 0;}if(s.size()==1){return 1;}int max=1;//用来更新最大值int j=1;//用来向前拓展字符串int mark=0;//用来标识不重复字符串的左,右侧用j--1标识while(j<s.size()){for(int k=mark;k<j;k++){if(s[k]==s[j]){mark=k+1;}}j++;if(j-mark>max){max=j-mark;}}return max;}
};
http://www.xdnf.cn/news/821989.html

相关文章:

  • MFC动态创建(dynamic creation)实现原理
  • 炫酷登录注册界面【超级简单 jQuery+JS+HTML+CSS实现】
  • mysql的如何输入dateadd_mysql中date_add()函数的使用?
  • java jersey使用总结_Java 中使用 Jersey 实现上传文件(附加密和解密)
  • android platform.pk8在那个文件下_o泡果奶软件在哪下载 o泡果奶一份礼物魔性文件下载...
  • 英文翻译_英文翻译修改: 益智玩具 Educational Toys
  • 国内外知名安全厂商防火墙默认登录地址、用户名、密码大全,建议收藏备用!
  • 计算机网络安全技术复习知识点总结
  • 一分钟学一个 Linux 命令 - tar
  • Build Setting 之 Code Signing 详解
  • 【C语言】初学者写基础代码的基本步骤
  • NSString使用stringWithFormat拼接
  • Action类的三种编写方式(七)
  • 《圣女之歌2:撒雷母天使》超强全攻略2
  • conn.execute、rs.open、command.execute方法用法大大不同
  • 原神4.7私服制作教程(含下载)
  • 基于javaweb+mysql的ssm校园社团门户网站管理系统(前台、后台)(java+jsp+ssm+mysql)
  • ggggxc学习笔记----ES6----Babel
  • Ubuntu Hardy(8.04) 版本 源列表
  • php 致命错误提示_PHP中的错误提示
  • 2023年打工人一直在纠结:逃离北上广,还是逃回北上广?
  • php cms建站,phpcms建站系统介绍以及phpcms建站流程
  • 黑客零基础自学路线(超详细),学完即可进去“包吃包住”
  • 关于 创建网络套接字失败 10106
  • 电商平台订单项目分析订单数据分析||电商数据分析项目总结!
  • IT技术网站汇总
  • 利用picasa2简单制作超炫壁画
  • 撕衣服小游戏原理
  • 非诚勿扰24灯全灭php,收二手货小伙上非诚勿扰,24盏灯全灭还遭羞辱,最后才知道是收二手豪车身价上亿...
  • 零基础C入门到深入简出