Longest Substring Without Repeating Characters

题目描述:

Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for "abcabcbb" is "abc", which the length is 3. For "bbbbb" the longest substring is "b", with the length of 1.

 

大意:返回最长字串,要求没有重复的char

 

解题思路:1,另外开辟数组vis,来辨别当前遍历的元素是否已经存在

                    2,两个下表索引,i,j,j-i+1,就代表了此时的长度。

                   3,j:用来遍历所有元素,同时vis【s【j】】=true;i:当前遍历元素如果为true(重复),那更新i,直至第一次出现的那个元素为false;

 

代码:

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
       // if(s=="")
        //return 0;
        bool vis[256];
        memset(vis,false,sizeof(vis));
        int len=0;
        int i=0,j=0;
       /* for(;j
   
   

 

 

代码分析:1,其实可以开辟数组,memset;也可以用vector<bool>,初始化为256大小的false;

                  2,刚开始程序中遍历过程中我加了if,else。发现代码很丑,遍历的过程中,只有两种情况,当前元素被访问过或者未被访问过,所以直接想到if,else。其实不然,不管访问过与否,终归要将当前访问元素设置为true,所以,如果只是在else下令vis【s【j】】=true,就会出现错误。故else的情况可以省略,只剩if情况,就如代码所示,但是这也是鸡肋,因为while已经足够判断当前的if了。同时更新i。注释掉的部分是比较精简的。

                 3,遇到情况,未必都是if else,while在一定条件下已经有if功能,并且else不一定有用,甚至是缺陷。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值