美文网首页
Longest Absolute File Path (Leet

Longest Absolute File Path (Leet

作者: stepsma | 来源:发表于2016-11-20 02:37 被阅读0次

    G家的一道面试题。这道题重点是通过split by '\n', 横向转化为纵向。利用 '\t' 的个数来建立层次。

    参考:http://www.cnblogs.com/grandyang/p/5806493.html

    dir
        subdir1
        subdir2
            file.ext
    

    建立unordered_map<int, int> 层次,与长度的映射关系。
    这道题值得注意的一点是:如果不讨论起始level = 0 (既find_last_of('\t') == string::npos) 也可以做,重点如下

    1. c++ string find last of, 如果没找到,便返回string::npos, 这个值换成int 就是 -1
    2. 对于c++ unordered_map而言,如果key不存在,返回0.
      map[-100] = 0;
    3. 注意如果file_name找不到'.', 表示subdirectory,需要及时更新该subdirectory的实时长度,而并不是取max, 因为该层max的subdirectory可能没有file。这就是为什么
    mp[lvl] = mp[lvl-1] + (int)file_name.length() + 1;
    而不是
    mp[lvl] = max(mp[lvl], mp[lvl-1] + (int)file_name.length() + 1);
    
    class Solution {
    public:
        int lengthLongestPath(string input) {
            if(input.empty()) return 0;
            istringstream ssi(input);
            string token;
            unordered_map<int, int> mp;
            int max_len = 0;
            while(getline(ssi, token)){
                int lvl = token.find_last_of('\t');
                string file_name = token.substr(lvl+1);
                if(file_name.find('.') != string::npos){
                    max_len = max(max_len, mp[lvl-1] + (int)file_name.length());
                }else{
                    mp[lvl] = mp[lvl-1] + (int)file_name.length() + 1;
                }
            }
            return max_len;
        }
    };
    

    相关文章

      网友评论

          本文标题:Longest Absolute File Path (Leet

          本文链接:https://www.haomeiwen.com/subject/jzwepttx.html