题目:

  请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。假设字符串中只包含’a~z”的字符。例如,在字符串“arabcacfr"中,最长的不含重复字符的子字符串是“acfr”,长度为4。

题解:
  方法一:

    使用滑动窗口函数【借助string中的find函数】

  方法二:
    使用动态规划

  

 //方法一:使用移动窗口
string getLenghtSubstr(const string &str)
{
if (str.length() < )return str;
string res, temp;
int L = , R = ;
res.assign(str.begin() + L, str.begin() + R);
temp = res;
while (R < str.length())
{
if (temp.find(str[R])!=-)
{
res = res.length() >= temp.length() ? res : temp;
L = R;
temp = "";
}
temp += str[R];
R++;
}
return res.length() >= temp.length() ? res : temp;
} //方法二:使用动态规划
//与移动窗口函数类似,只不过是用数组代替了string.find
string DP(const string &str)
{
if (str.length() <= )return str;
vector<int>word(, -);
string curStr = "", maxStr = "";
//int curL = 0, maxL = 0;
for (int i = ; i < str.length(); ++i)
{
int index = word[str[i] - 'a'];
if (index< || i - index>curStr.length())//如果没出现过,或者出现的位置在我目前记录的子串的前面,那么第i个字母我可以添加
curStr += str[i]; //++curL
else //第i个字母重复在我目前记录的子串中
{
maxStr = curStr.length() > maxStr.length() ? curStr : maxStr;//先更新
//maxL = curL > maxL ? curL : maxL;
curStr += str[i];
curStr.erase(, curStr.length() - (i - index));//删除重复节点
//curL = i-index;
}
word[str[i] - 'a'] = i;
}
return curStr.length() > maxStr.length() ? curStr : maxStr;
//return curL > maxL? curL :maxL;
}

  

剑指offer——50最长不含重复字符和子字符串的更多相关文章

  1. 剑指 Offer 48. 最长不含重复字符的子字符串 + 动态规划 + 哈希表 + 双指针 + 滑动窗口

    剑指 Offer 48. 最长不含重复字符的子字符串 Offer_48 题目详情 解法分析 解法一:动态规划+哈希表 package com.walegarrett.offer; /** * @Aut ...

  2. 【Java】 剑指offer(48) 最长不含重复字符的子字符串

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字 ...

  3. 每日一题 - 剑指 Offer 48. 最长不含重复字符的子字符串

    题目信息 时间: 2019-07-02 题目链接:Leetcode tag: 动态规划 哈希表 难易程度:中等 题目描述: 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度 ...

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

    题目描述 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度. 示例1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 & ...

  5. 剑指offer-面试题48-最长不含重复字符的子字符串-动态规划

    /* 题目: 最长不含重复字符的子字符串. */ /* 思路: f(i) = f(i-1) + 1,(未出现过当前字符,distance > f(i-1) distance,当前字符和上一次出现 ...

  6. 《剑指offer》第四十八题(最长不含重复字符的子字符串)

    // 面试题48:最长不含重复字符的子字符串 // 题目:请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子 // 字符串的长度.假设字符串中只包含从'a'到'z'的字符. #inclu ...

  7. 【Offer】[48] 【最长不含重复字符的子字符串】

    题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度.假设字符串中只包含'a'~'z'的字符.例如,在字符串&q ...

  8. [剑指Offer]48-最长不含重复字符的子字符串(递归思想,循环实现)

    题意 如题,字符串只含a-z,输出该子串长度.例:"arabcacfr",输出4. 解题思路 递归思想 计f(i)为以第i个字符结尾的最长不含重复字符的子串长度. 状态转移:计d为 ...

  9. 《剑指offer》面试题48. 最长不含重复字符的子字符串

    问题描述 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度.   示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串 ...

随机推荐

  1. Windows 8.1 PLSQL_32连接到RHEL6.1 Oracle10gr2_64

    目录 目录 系统环境 连接Oracle Server 系统环境 操作系统 Windows 8.1 RHEL6.1 软件 Oracle10gr2 PL/SQL instantclient-basic-w ...

  2. idea 查看字节码 bytecode插件 (jclasslib Bytecode Viewer、ASM Bytecode Viewer )

    文章目录 jclasslib Bytecode Viewer ASM Bytecode Viewer jclasslib Bytecode Viewer 然后重启idea===>重新编译(构建项 ...

  3. 2019杭电多校第六场hdu6638 Snowy Smile(线段树+枚举)

    Snowy Smile 题目传送门 解题思路 先把y离散化,然后把点按照x的大小进行排序,我们枚举每一种x作为上边界,然后再枚举其对应的每一种下边界.按照这种顺序插入点,这是一个压维的操作,即在线段树 ...

  4. ldap认证服务的搭建

    1. Ldap服务介绍 LDAP 全称轻量级目录访问协议(英文:Lightweight Directory Access Protocol),是一个运行在 TCP/IP 上的目录访问协议.目录是一个特 ...

  5. 项目中AOP的实例应用

    其中包括了权限管理.表单验证.事务管理.信息过滤.拦截器.过滤器.页面转发等等. 公司项目的应用:(涉及用户验证登录以及用户是否有管理员权限.心理用户权限等),还有涉及的其他日志管理代码就不一一举例了 ...

  6. bootstrap学习(四)表格

    基础样式: 自适应沾满浏览器 <table class="table"> <tr> <th>序号</th> <th>姓名 ...

  7. java nio socket实例

    Server端代码: public class NioServer { //通道管理器 private Selector selector; //获取一个ServerSocket通道,并初始化通道 p ...

  8. shell script 学习

    终于来到了shell脚本的学习,貌似很牛叉. shell script鸟叔解释:利用shell的功能写的一个program,使用纯文本文件,将一些shell语法和指令写在里面,搭配正则表示法,管线命令 ...

  9. nginx进行获取阿里云slb真实ip配置操作

    环境: 1.使用阿里云的slb进行配置nginx,nginx无法获取用户的真实ip解决方案 参考阿里云: https://help.aliyun.com/knowledge_detail/40535. ...

  10. Shiro学习(16)综合实例

    简单的实体关系图 简单数据字典 用户(sys_user) 名称 类型 长度 描述 id bigint 编号 主键 username varchar 100 用户名 password varchar 1 ...