题意

如题,字符串只含a-z,输出该子串长度。例:"arabcacfr",输出4。

解题思路

递归思想

  • 哈希表"int lastAppear[26]":存储各字母在之前遍历过程中最近一次出现的位置。初始化-1表示该字母从未出现。
  • 变量len:为以每个字符结尾的最长不含重复字符的子串长度。计i-lastIdx为当前字符出现位置和上次出现该字符的位置之差。比较这两者:
    • (1) 当i-lastIdx>len (以i-1结尾),说明字符出现在len 以(i-1结尾)对应的最长子串外,所以len=len+1。
    • (2) i-lastIdx<=len (以i-1结尾),说明字符出现在len (以i-1结尾)对应的最长子串中,此时说明当前字符与上次出现的该字符之间无重复字符,所以len=i-lastIdx;
  • 注意每次要更新哈希表。

用循环实现。

时间复杂度O(n).

代码(C++)

#include <iostream>
#include <string>
using namespace std; int subStrLen(string s){
if(!s.size()){
return 0;
} int lastAppear[26];
memset(lastAppear,-1,sizeof(lastAppear)); int tempLen=0;
int maxLen=0;
for(int i=0;i<s.size();++i){
if(i==0){
tempLen=1;
}
else{
int lastIdx=lastAppear[s[i]-'a'];
if(lastIdx==-1){
tempLen+=1;
}
else if((i-lastIdx)>tempLen){
tempLen+=1;
}
else{
tempLen=i-lastIdx;
}
} lastAppear[s[i]-'a']=i;
if(tempLen>maxLen){
maxLen=tempLen;
}
}
return maxLen;
} int main(int argc, const char * argv[]) {
string s="arabcacfr";
int len=subStrLen(s);
cout<<len<<endl;
return 0;
}

代码(Java)

public class Main {
public static void main(String args[]) {
String str="aa";
int len=getLongestSubDisStr(str);
System.out.println(len);
} public static int getLongestSubDisStr(String str) {
if(str==null||str=="") {
return 0;
} int[] map=new int[256];
int maxLen=-1;
int len=0;
for(int i=0;i<map.length;++i) {
map[i]=-1;
} for(int i=0;i<str.length();++i) {
int lastIdx=map[str.charAt(i)];
if(lastIdx==-1||(i-lastIdx)>len) {
len+=1;
}
else {
len=i-lastIdx;
} map[str.charAt(i)]=i; if(len>maxLen) {
maxLen=len;
}
}
return maxLen;
}
}

[剑指Offer]48-最长不含重复字符的子字符串(递归思想,循环实现)的更多相关文章

  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——50最长不含重复字符和子字符串

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. SVM标记学习

    # -*- coding: utf-8 -*- """ Created on Mon Oct 1 09:32:37 2018 @author: ""& ...

  2. C++11之for循环的新用法《转》

    相关资料:https://legacy.gitbook.com/book/changkun/cpp1x-tutorial/details C++11之for循环的新用法 C++使用如下方法遍历一个容器 ...

  3. mysql 索引优化知识整理笔记

    http://blog.csdn.net/zhxp_870516/article/details/8434539 http://www.jb51.net/article/49346.htm https ...

  4. Error: Apache shutdown unexpectedly --解决

    原因1:端口占用,百度可解决 原因2: 配置的启动目录不存在~~~ 解决 修改默认目录:

  5. MySQL性能分析(转)

    第一步:检查系统的状态 通过操作系统的一些工具检查系统的状态,比如CPU.内存.交换.磁盘的利用率.IO.网络,根据经验或与系统正常时的状态相比对,有时系统表面上看起来看空闲,这也可能不是一个正常的状 ...

  6. linux下安装Tomcat7.0

    1.下载安装文件:Download apache-tomcat-7.0.14.tar.gz        下载1              下载 2.输入命令解压文件:tar - zxvf apach ...

  7. 命令行下将磁盘从GPT转换为MBR

    1.在系统提示无法安装的那一步,按住“shift+f10”,呼出“cmd”命令符 2.输入:diskpart,回车 进入diskpart 3.输入:list disk,回车 显示磁盘信息 4.输入:s ...

  8. linux 使用spinlock的配对关系问题

    大家使用spinlock的时候,一般是这么配对: spin_lock---------------------spin_unlock------------------最轻 spin_lock_bh- ...

  9. linux 2.6.32文件系统 fd与file*之间的关系

    给定如下一定情况: crash> files PID: TASK: ffff8817facd2100 CPU: COMMAND: "slabtop" ROOT: / CWD: ...

  10. Pronunciation – The Definitive Guide to the Top 100 Words in American English

    Pronunciation – The Definitive Guide to the Top 100 Words in American English Share Tweet Share Tagg ...