/*
题目:
最长不含重复字符的子字符串。
*/
/*
思路:
f(i) = f(i-1) + 1,(未出现过当前字符,distance > f(i-1)
distance,当前字符和上一次出现该字符的距离
*/
#include<iostream>
#include<cstring>
#include<vector>
#include<algorithm> using namespace std; int longestSubstringWithoutDuplication(string str){
int en[26];
memset(en,-1,sizeof(en));
int len = str.size();
int maxVal = 0;
int curr = 0;
for(int i = 0; i < len; i++){
if(en[str[i]-'a'] == -1){
curr = curr + 1;
}else{
int d = i - en[str[i]-'a'];
if(d > curr){
curr++;
}else{
if(curr > maxVal){
maxVal = curr;
}
curr = d;
}
}
cout<<str[i]<<" "<<i<<" "<<curr<<endl;
en[str[i]-'a'] = i;
}
return max(curr,maxVal);
} int main(){
string str="arabcacfr";
cout<<longestSubstringWithoutDuplication(str); return 0;
}

  

剑指offer-面试题48-最长不含重复字符的子字符串-动态规划的更多相关文章

  1. 剑指offer面试题48: 最长不含重复字符的子字符串

    Given a string, find the length of the longest substring without repeating characters.(请从子字符串中找出一个最长 ...

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

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

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

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

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

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

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

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

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

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

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

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

  8. 剑指offer——50最长不含重复字符和子字符串

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

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

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

随机推荐

  1. Arduino系列之LCD1602模块使用方法(一)

    下面我将简单介绍LCD1602模块的使用方法: 1602液晶显示器(1602 Liquid Crystal Display,此后简称1602 LCD)是一种常见的字符液晶显示器,因其能显示16*2个字 ...

  2. 迭代器中set的使用

    今天对迭代器中的set方法进行了一下简单的使用,由于之前使用过list方法,所以将他与list进行了一下对比. list中加入对象时不会进行查重,也就是只要是一个符合的对象就可以加到list中,而对于 ...

  3. Ceph 存储集群3-部署:

    ceph-deploy 工具是一种部署 Ceph 的方法,它只依赖到服务器的 SSH 访问. sudo 和 Python .它可在你的工作站上运行,不需要服务器.数据库.或其它工具.如果你安装.拆卸过 ...

  4. 小程序图片 mode 设置为 widthFix 图片显示瞬间竖向拉伸变形闪烁

    官方文档中 mode="widthFix"   宽度不变,高度自动变化,保持原图宽高比不变,即设置图片宽度而高度自适应. 但是在实际开发中发现图片在初始加载时瞬间竖向拉伸变形闪烁然 ...

  5. bzoj 50题纪念

    bzoj好难,边看题解边做终于水到了50t,不知道水平提没提高啊TAT

  6. Trie(字典树)的侃侃

    Trie是什么 ? 字典树 : 见名知意(在树上进行查询). 跟字典相关的必定与查询有密切的关系, 查询就需要一定的媒介作为支撑,树就为这种查询提供支撑. Trie做什么 ? 实现字符串快速检索的多叉 ...

  7. Mac-Mysql忘记root密码

    cd /usr/local/mysql/bin 切换到root权限 ,需要输入密码: sudo su 输入之后会看见如下信息: sh-3.2# 使用如下命令以安全模式运行mysql ./mysqld_ ...

  8. 使用Java8 Files类读写文件

    Java8 Files类的newBufferedReader()和newBufferedWriter()方法 这两个方法接受Path类型的参数.Path 类是Java8 NIO中的接口.可以由Path ...

  9. Cmake知识----编写CMakeLists.txt文件编译C/C++程序(转)

    1.CMake编译原理 CMake是一种跨平台编译工具,比make更为高级,使用起来要方便得多.CMake主要是编写CMakeLists.txt文件,然后用cmake命令将CMakeLists.txt ...

  10. JAVA System.exit(0) 和 System.exit(1) 的区别

    System.exit(int state) 方法都是来结束当前运行的java虚拟机.所有System.exit(1).System.exit(0) 执行后都会退出程序. state为0时时正常退出, ...