zoukankan      html  css  js  c++  java
  • leetcode[159] Longest Substring with At Most Two Distinct Characters

    找到最多含有两个不同字符的子串的最长长度。例如:eoeabc,最长的是eoe为3,其他都为2.

    思路:

    用p1,p2表示两种字符串的最后一个出现的下标位置。初始p1为0. p2为-1.start初始化为0,表示两种字符串的开头。

    只要遍历一次string就可以得到结果了。

    首先我们要确定p2的值,那么i要一直到不等于s[p1]的值为止,那么位置就是p2了。

    然后继续往后如果来一个字符等于之前两种的其中一种,那么就要更新最后一次出现的下标。根据是谁就更新谁。

    如果是新的字符了,那么就要更新start了,start肯定就是小的那个p1+1,因为p1是一种字符的最后一个位置,他的下一位肯定就是另一个字符了。

    每次计算大的结束点,p1或者p2,与start中间的个数就是我们要的长度了。最后返回最长的就是了。

    因为存在只有一种字符的情况,所以要判断如果p2最后还是-1,那么就返回整个串的长度就是了。代码如下:

    因为不能oj,不知道代码有没有bug

        int longest159(string s)
        {
            if (s.size() == 0) return 0;
            int ans = 0;
    
            int p1 = 0, p2 = -1, start = 0;
    
            for (int i = 0; i < s.size(); i++)
            {
                if (p2 == -1)
                {
                    if (s[i] == s[p1])
                        continue;
                    p2 = i;
                }
    
                if (s[i] == s[p1] || s[i] == s[p2])
                    s[i] == s[p1] ? p1 = i : p2 = i;
                else
                {
                    start = min(p1, p2) + 1;
                    p1 < p2 ? p1 = i : p2 = i;
                }
                if (max(p1, p2) - start + 1 > ans)
                    ans = max(p1, p2) - start + 1;
            }
            if (p2 == -1)
                return s.size();
            return ans;
        }
  • 相关阅读:
    jQuery .css("width")和.width()的区别
    用jquery写一个滑动TAB 例子
    D
    4 Values whose Sum is 0
    Hibernate学习之hql 与sql
    BigDecimal进行精确运算
    Date类与SimpleDateFormat类中parse()方法和format()方法
    单例模式下的懒汉和饿汉模式
    Java中Date类型详解
    Spring @Column的注解详解
  • 原文地址:https://www.cnblogs.com/higerzhang/p/4185649.html
Copyright © 2011-2022 走看看