zoukankan      html  css  js  c++  java
  • 一道vector实现字典的题目 C++

    使用vector 在解决一些问题的时候确实非常高效。
    可以不像Array 那样一个一个去查。
    可以大幅度缩减代码实现的时间。
    Given a string, find the length of the longest substring without repeating characters.

    Example 1:

    Input: "abcabcbb"
    Output: 3
    Explanation: The answer is "abc", with the length of 3.
    Example 2:

    Input: "bbbbb"
    Output: 1
    Explanation: The answer is "b", with the length of 1.
    Example 3:

    Input: "pwwkew"
    Output: 3
    Explanation: The answer is "wke", with the length of 3.
    Note that the answer must be a substring, "pwke" is a subsequence and not a substring.

    https://leetcode.com/problems/longest-substring-without-repeating-characters/submissions/
    Leetcode 里面的第三题我的解法,非常冗长。

    int main(){
        string s = "qrebtmppwuuhapcegnaon";
        char t_string[101]="";
        int max_ceil = 0;
        int ceil = 0;
        for (int i=0; i<s.length()-max_ceil;i++){
            for(int j=0; j<s.length()-i; j++){
                for(int k=0; k < ceil;k++){
                    if(s[i+j] == t_string[k]){
                        if(ceil>max_ceil){
                            max_ceil = ceil;
                        }
                        ceil=0;
                        j=0;
                        i++;
                        break;
                    }
                }
                t_string[ceil]=s[i+j];
                ceil++;
            }
        }
        if(ceil>max_ceil){
            max_ceil = ceil;
        }
        cout<< max_ceil;
    return 0;
    }
    
    

    在上面看到一个大神的解法,拿来分享。

     int main(){
            string s="uvuioinmk";
            int maxLen = 0;
            vector<int> dict(256, -1);
            int start = -1;
            for(int i=0; i<s.length();i++){
                if(dict[s[i]]>start)//该重复字符有效...
                    start = dict[s[i]]; //替换到最近出现的重复字符位置
                dict[s[i]] = i; //最近出现的位置
                maxLen = max(maxLen, i - start);
            }
            cout<<maxLen;
    }
    
    

    注释是我自己加的,理解这个算法确实需要一点抽象思维。

  • 相关阅读:
    [转]用异或交换两个整数的陷阱
    线索化二叉树
    [转]Socket编程中,阻塞与非阻塞的区别
    两个链表的归并
    [转] std::string and stl 算法
    类图
    leetcode 答案
    about raw socket
    54. Spiral Matrix【数组】
    矩阵乘法问题的实现
  • 原文地址:https://www.cnblogs.com/venusian/p/10480872.html
Copyright © 2011-2022 走看看