博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第三题:Longest Substring Without Repeating Characters
阅读量:4054 次
发布时间:2019-05-25

本文共 1194 字,大约阅读时间需要 3 分钟。

题目链接:

找到最长不重复子串,使用hash方法来做是极好的!遍历string,找到一个字符,然后会判断这个字符是不是已经在当前的这个子串中,这个使用hash方法,因为可见字符最多256个,那么使用hash[256]就可以!初始化为-1,保存的是相应的字符在string中的位置。如果遇到在前面存在的字符,那么需要将这个子串的start位置移动到已经存在的位置后面一位,然后继续遍历,直到遍历结束。

具体看下面的代码:

class Solution {public:    int lengthOfLongestSubstring(string s) {        int max_len = 0, start = 0, i = 0, n = s.length(), len = 0;        int hash_elem[256];        memset(hash_elem, -1, sizeof(hash_elem));        while (i < n){            // hash_elem[s[i]] < 0说明:是新的字符,之前没有出现过            // hash_elem[s[i]] < start说明:字符出现过,但是已经作废            // 例如: abcdb            // 我们遍历到abcd,然后发现b重复,那么后面其实是从c开始,            // 但是a由于b的影响也就被作废了,但是这个时候a在hash_elem中            // 的下标还是0,但是小于start,所以相当于也是合法的字符            //            if (hash_elem[s[i]] < 0 || hash_elem[s[i]] < start)                ++len;            else{                max_len = max_len > len ? max_len : len;                // 注意吧前面的字符减掉                //                len -= hash_elem[s[i]] - start;                // 新的位置从重复字符的位置后面一位开始                //                start = hash_elem[s[i]] + 1;            }            hash_elem[s[i]] = i;            ++i;        }        return max_len > len ? max_len : len;    }};

转载地址:http://zoaci.baihongyu.com/

你可能感兴趣的文章
数据库笔试题
查看>>
chances!I would let it go any more!
查看>>
何为程序员的理想生活方式
查看>>
大二你能做什么
查看>>
谈谈软件从业学习方向--同济大学软件学院JacksonWan
查看>>
Java中利用JMF编写摄像头拍照程序
查看>>
读《SQL Server2000》数据库设计与系统管理
查看>>
java23面试题
查看>>
大学生IT创业还有神话吗?
查看>>
Java技术的新方向
查看>>
Java的JDBC数据库连接池实现方法
查看>>
Struts + Spring + Hibernate 框架资源--整理
查看>>
创业实验室-第一堂课感想
查看>>
创业实验室-第二堂课感想
查看>>
软考-下个阶段征服对象
查看>>
非阻塞套接字(Nonblocking Sockets) 概述
查看>>
Java NIO API详解
查看>>
也许可以更power
查看>>
我来拉Eclipse
查看>>
自己编写的NIO非阻塞聊天室
查看>>