<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          ?LeetCode刷題實(shí)戰(zhàn)388:文件的最長(zhǎng)絕對(duì)路徑

          共 5737字,需瀏覽 12分鐘

           ·

          2021-09-22 20:03

          算法的重要性,我就不多說(shuō)了吧,想去大廠,就必須要經(jīng)過(guò)基礎(chǔ)知識(shí)和業(yè)務(wù)邏輯面試+算法面試。所以,為了提高大家的算法能力,這個(gè)公眾號(hào)后續(xù)每天帶大家做一道算法題,題目就從LeetCode上面選 !

          今天和大家聊的問(wèn)題叫做 文件的最長(zhǎng)絕對(duì)路徑,我們先來(lái)看題面:
          https://leetcode-cn.com/problems/longest-absolute-file-path/

          示例

          示例 1
          輸入:input = "dir\n\tsubdir1\n\tsubdir2\n\t\tfile.ext"
          輸出:20
          解釋:只有一個(gè)文件,絕對(duì)路徑為 "dir/subdir2/file.ext" ,路徑長(zhǎng)度 20
          路徑 "dir/subdir1" 不含任何文件

          示例 2
          輸入:input = "dir\n\tsubdir1\n\t\tfile1.ext\n\t\tsubsubdir1\n\tsubdir2\n\t\tsubsubdir2\n\t\t\tfile2.ext"
          輸出:32
          解釋:存在兩個(gè)文件:
          "dir/subdir1/file1.ext" ,路徑長(zhǎng)度 21
          "dir/subdir2/subsubdir2/file2.ext" ,路徑長(zhǎng)度 32
          返回 32 ,因?yàn)檫@是最長(zhǎng)的路徑

          示例 3
          輸入:input = "a"
          輸出:0
          解釋:不存在任何文件

          示例 4
          輸入:input = "file1.txt\nfile2.txt\nlongfile.txt"
          輸出:12
          解釋:根目錄下有 3 個(gè)文件。
          因?yàn)楦夸浿腥魏螙|西的絕對(duì)路徑只是名稱本身,所以答案是 "longfile.txt" ,路徑長(zhǎng)度為 12


          解題

          https://blog.csdn.net/weixin_44171872/article/details/110924105

          主要思路:解題匯總
          (1)每次找出一行進(jìn)行判斷,每行中只有一個(gè)字符串名字,標(biāo)識(shí)當(dāng)前行在總的字符串的終止位置,標(biāo)識(shí)當(dāng)前行是否是文件名字,記錄當(dāng)前行中‘\t’的數(shù)量;
          (2)取出當(dāng)前行中的字符串名字,同時(shí)根據(jù)當(dāng)前行中的‘\t’的數(shù)量,據(jù)定當(dāng)前路徑中字符串名字的數(shù)量,并同步更新長(zhǎng)度,最后將當(dāng)前字符串名字壓入到路徑中;
          (3)根據(jù)當(dāng)前字符串名字是否表示文件,據(jù)定是否更新最大的路徑,最大路徑更新時(shí),注意路徑中的分割符的數(shù)量;
          (4)然后更新索引位置,獲取下一行;


          class Solution {
          public:
            //獲取字符串中的一行,保存當(dāng)前行的終止位置在總字符串中的索引位置,‘\t’的數(shù)量和是否是文件名
              int find_line(string&input,int pos,int& count_tab,bool& is_txt){
                //初始化
                  count_tab=0;
                  is_txt=false;
                  //獲取一行
                  while(pos<input.size()){
                      if(input[pos]=='\t'){//記錄‘\t’的數(shù)量
                          ++count_tab;
                      }
                      else if(input[pos]=='\n'){//找到當(dāng)前行的終止位置
                          break;
                      }
                      else if(input[pos]=='.'){//標(biāo)識(shí)是否是文件名字
                          is_txt=true;
                      }
                      ++pos;
                  }
                  return pos;
              }
              int lengthLongestPath(string input) {
                  int pos=0;
                  vector<string> path;
                  int cur_len=0;//當(dāng)前路徑的長(zhǎng)度,不包括路徑名字之間的分隔符
                  int max_len=0;//最長(zhǎng)的路徑
                  int count_tab=0;//每行前面的'\t'的數(shù)量
                  bool is_txt=false;//當(dāng)前字符串名字是否是文件名
                  while(pos<input.size()){//遍歷字符串
                    //獲取當(dāng)前行
                      int cur_end=find_line(input,pos,count_tab,is_txt);
                      //獲取當(dāng)前行中的字符串名字
                      string cur_str=input.substr(pos+count_tab,cur_end-(pos+count_tab));
                      //根據(jù)‘\t’的數(shù)量,彈出多余的名字
                      while(path.size()>count_tab){
                          cur_len-=path.back().size();
                          path.pop_back();
                      }
                      //更新路徑長(zhǎng)度和路徑
                      cur_len+=cur_str.size();
                      path.push_back(cur_str);
                      if(is_txt){//更新可能的最大長(zhǎng)度
                          max_len=max_len>=cur_len+path.size()-1?max_len:cur_len+path.size()-1;
                      }
                      //更新索引位置,去獲取下一行
                      pos=cur_end;
                      if(pos!=input.size()){
                          ++pos;
                      }
                  }
                  return max_len;
              }
          };


          好了,今天的文章就到這里,如果覺(jué)得有所收獲,請(qǐng)順手點(diǎn)個(gè)在看或者轉(zhuǎn)發(fā)吧,你們的支持是我最大的動(dòng)力 。

          上期推文:

          LeetCode1-380題匯總,希望對(duì)你有點(diǎn)幫助!

          LeetCode刷題實(shí)戰(zhàn)381:O(1) 時(shí)間插入、刪除和獲取隨機(jī)元素

          LeetCode刷題實(shí)戰(zhàn)382:鏈表隨機(jī)節(jié)點(diǎn)

          LeetCode刷題實(shí)戰(zhàn)383:贖金信

          LeetCode刷題實(shí)戰(zhàn)384:打亂數(shù)組

          LeetCode刷題實(shí)戰(zhàn)385:迷你語(yǔ)法分析器

          LeetCode刷題實(shí)戰(zhàn)386:字典序排數(shù)
          LeetCode刷題實(shí)戰(zhàn)387:字符串中的第一個(gè)唯一字符

          瀏覽 24
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  青娱乐欧美精品 | 日本AAA视频 | 北条麻妃 无码 在线 视频 | 国产老熟女高潮毛片A片仙踪林 | 国产色婷婷视频在线观看 |