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

企业如何建设网站免费工程项目分包平台

企业如何建设网站,免费工程项目分包平台,企业网站建设与优化,仿团购网站模板❓剑指 Offer 48. 最长不含重复字符的子字符串 难度:中等 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。 示例 1: 输入: “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为…

❓剑指 Offer 48. 最长不含重复字符的子字符串

难度:中等

请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。

示例 1:

输入: “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。

示例 2:

输入: “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。

示例 3:

输入: “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。

提示

  • s.length <= 40000

注意:本题与 3. 无重复字符的最长子串 相同。

💡思路:动态规划

定义 dp 数组,dp[i] 代表以字符 s[i] 为结尾的 “最长不重复子字符串” 的长度。

固定右边界 i ,设字符 s[i] 左边距离最近的相同字符为 s[j] ,即 s[j] = s[i]

  • i < 0 ,即 s[i] 左边无相同字符,则 dp[i] = dp[i−1] + 1
  • dp[i−1] < i - j,说明字符 s[i] 在子字符串 dp[i−1] 区间之外 ,则 dp[i] = dp[i−1] + 1
  • dp[i−1] ≥ i - j ,说明字符 s[j] 在子字符串 dp[i−1] 区间之中 ,则 dp[i] 的左边界由 s[j] 决定,即 dp[i] = i − j

所以 状态转移方程 为:
d p [ i ] = { d p [ i − 1 ] + 1 , i < 0 d p [ i − 1 ] + 1 , d p [ i − 1 ] < i − j i − j , d p [ i − 1 ] ≥ i − j dp[i]=\begin{cases}dp[i-1]+1&,i<0\\dp[i-1]+1&,dp[i-1]<i-j\\i-j&,dp[i-1]\geq i-j\end{cases} dp[i]= dp[i1]+1dp[i1]+1ij,i<0,dp[i1]<ij,dp[i1]ij

观察发现 dp[i] 只与 dp[i - 1] 有关,所以只需定义一个变量 curLen 记录上一个长度。

使用哈希表统计:

  • 遍历字符串 s 时,使用哈希表(记为 preIndexs )统计 各字符最后一次出现的索引位置
  • 遍历到 s[i] 时,可通过访问哈希表 preIndexs[s[i]] 获取最近上一个的相同字符的索引 pre

🍁代码:(C++、Java)

C++

class Solution {
public:int lengthOfLongestSubstring(string s) {int curLen = 0;int maxLen = 0;map<char, int> preIndexs;for(int i = 0; i < s.size(); i++){int pre = preIndexs.find(s[i]) == preIndexs.end() ? -1 : preIndexs[s[i]]; // 获取当前字符的索引curLen = curLen < i - pre ? curLen + 1 : i - pre; // dp[i - 1] -> dp[i]maxLen = max(maxLen, curLen);preIndexs[s[i]] = i;}return maxLen;}
};

Java

class Solution {public int lengthOfLongestSubstring(String s) {int curLen = 0;int maxLen = 0;Map<Character, Integer> preIndexs = new HashMap<>();for(int i = 0; i < s.length(); i++){int pre = preIndexs.getOrDefault(s.charAt(i), -1); // 获取当前字符的索引curLen = curLen < i - pre ? curLen + 1 : i - pre; // dp[i - 1] -> dp[i]maxLen = Math.max(maxLen, curLen);preIndexs.put(s.charAt(i), i);}return maxLen;}
}

🚀 运行结果:

在这里插入图片描述

🕔 复杂度分析:

  • 时间复杂度 O ( n ) O(n) O(n),其中 n 为字符串 s 的长度。
  • 空间复杂度 O ( 1 ) O(1) O(1),字符的 ASCII 码范围为 0 ~ 127 ,哈希表 preIndexs 最多使用 O ( 128 ) = O ( 1 ) O(128)=O(1) O(128)=O(1) 大小的额外空间。

题目来源:力扣。

放弃一件事很容易,每天能坚持一件事一定很酷,一起每日一题吧!
关注我LeetCode主页 / CSDN—力扣专栏,每日更新!

注: 如有不足,欢迎指正!

http://www.yayakq.cn/news/336981/

相关文章:

  • 衡阳市住房和城乡建设部网站公司微信小程序开发
  • 关于平面设计的网站免费行情的软件大全下载
  • 网站建设之后网站开发制作平台
  • 网站内容管理系统 下载厂房网络推广平台
  • 如何建立平台网站百度应用商店app下载
  • 大学教学应用网站开发现状宿州做网站的公司有哪些
  • 网站建设前期如何做好市场定位分析从化一站式网站建设
  • 企业网站设计总结网页设计代码含js
  • 建筑网站资料排行榜免费网站建设凡科
  • 做网站选云服务器内核三网合一网站报价
  • 重庆金山建设监理有限公司网站去掉wordpress谷歌字体
  • 惠州网站建设哪里有wordpress文章时间标签
  • 用腾讯云做淘宝客网站视频凯胜东营小程序开发
  • 建站推广哪里有建站新闻资讯建设银行广州支行网站
  • 微网站制作工具有哪些制作完整网站需要掌握哪些知识
  • 青岛网站制作案例咸宁响应式网站建设价格
  • 网站建设销售模式七星彩网投网站建设
  • 河北省建设网站首页公司做的网站列入什么科目
  • 网站赚钱吗中文网站怎么做英文版
  • 搭建邮箱注册网站自己做网站都需要什么
  • 网站 app 共同架构众筹那些网站可以做
  • 网站开发主要技术网站建设投资大概每年需要多少钱
  • 网站建设攵金手指专业网络服务器忙
  • 金融网站建设o2o网站建设行情
  • 有哪些网站可以做印度市场调研中国机械工程
  • 可以做t恤的网站域名需要跟网站名称一致么
  • 网站后台关键词建e室内设计网公众号
  • wordpress站内跳转泗泾做网站
  • 公司网站模板内容给女友惊喜做网站
  • 怎么用花生壳做网站赚钱网