leetcode轮回计划20181204

  1. 392 Is Subsequence
    题意:给定两个字符串s和t,判断t是否是s的子序列(s删除一部分字符可以得到t)。
    思路:hashmap
  2. 394 Decode String
    题意:s = "3[a2[c]]", return "accaccacc".
    思路:分治,注意细节。
class Solution {
public:
    string decodeString(string s) {
        int i = 0;
        return decodeString(s,i);
    }
    string decodeString(string& s, int& i){
        string ret;
        while(i < s.size() && s[i] != ']'){
            if(!isdigit(s[i])) ret += s[i++];
            else{
                int n = 0;
                while(i < s.size() && isdigit(s[i])){
                    n = n * 10 + s[i ++] - '0';
                }
                
                ++ i;
                string t = decodeString(s, i);
                ++ i;
                while(n --> 0) ret += t;
            }
        }
        
        return ret;
    }
};
  1. 395 Longest Substring with At Least K Repeating Characters
    题意:最大子串,需要满足子串中所有的字符的数量都大于k。
    思路:
def longestSubstring(self, s, k):
    if len(s) < k:
        return 0
    c = min(set(s), key=s.count)
    if s.count(c) >= k:
        return len(s)
    return max(self.longestSubstring(t, k) for t in s.split(c))

c++版本:

class Solution {
public:
    int longestSubstring(string s, int k) {
        if(s.size() < k) return 0;
        int imin = INT_MAX;
        char curr;
        unordered_map<char, int> mp;
        for(auto a : s) mp[a]++;
        for(auto a : mp) if(a.second < imin){
            imin = a.second;
            curr = a.first;
        }
        if(imin >= k) return s.size();
        stringstream ss(s);
        string currstring;
        vector<string> list;
        while(getline(ss, currstring, curr)) list.push_back(currstring);
        int ret = INT_MIN;
        for(auto a : list) ret = max(ret, longestSubstring(a, k));
        
        return ret;
    }
};
  1. 396 Rotate Function
  2. 397 Integer Replacement
    思路:map
  3. 398 Random Pick Index
  4. 399 Evaluate Division
    题意:给出一部分算式的结果,求另一部分算式的结果
    思路:图
class Solution {
public:
    vector<double> calcEquation(vector<pair<string, string>> equations, vector<double>& values, vector<pair<string, string>> queries) {
        unordered_map<string, unordered_map<string, double>> m;
        vector<double> ret;
        for(int i = 0;i < values.size();++ i){
            m[equations[i].first].insert(make_pair(equations[i].second, values[i]));
            if(values[i] != 0)
                m[equations[i].second].insert(make_pair(equations[i].first, 1 / values[i]));
        }
        for(auto a : queries){
            unordered_set<string> s;
            double tmp = check(a.first, a.second, m, s);
            if(tmp) ret.push_back(tmp);
            else ret.push_back(-1);
        }
        return ret;
    }
    double check(string up, string down, unordered_map<string, unordered_map<string, double>>& m, unordered_set<string>& s){
        if(m[up].find(down) != m[up].end()) return m[up][down];
        for(auto a : m[up]){
            if(s.find(a.first) == s.end()){
                s.insert(a.first);
                double tmp = check(a.first, down, m, s);
                if(tmp) return a.second * tmp;
            }
        }
        return 0;
    }
};
  1. 400 Nth Digit
public int findNthDigit(int n) {
    n -= 1;
    int digits = 1, first = 1;
    while (n / 9 / first / digits >= 1) {
        n -= 9 * first * digits;
        digits++;
        first *= 10;
    }
    return (first + n/digits + "").charAt(n%digits) - '0';
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,792评论 0 33
  • Roman to Integer 题目描述 思路: 题意:罗马数字最多只有一个“左边修饰” 有左边修饰进两位,默认...
    fjxCode阅读 517评论 0 0
  • 今天周末,有点小雨,带儿子一起去外面走了一圈,空气有点潮湿,混杂着青草的香味,闻上去很舒服。送儿子去学写字,自己走...
    姣燕阅读 235评论 0 1
  • 这本书看到现在也应该如鱼得水了.看一些本书的代码扫一眼就能知道是什么意思了.套路已经熟悉了~~ 如果参数数量不是三...
    Hy_Slin阅读 144评论 0 0
  • 今天又到了值班的日子,早晨醒来烁烁不久也睁开眼,又开始了互动环节,现在小孩的表情细节都比原来更加多了
    易如人生阅读 239评论 0 0