LeetCode 第190場周賽記錄

題目

一如既往菜的我只a了三道堕澄。

題目鏈接:

1455.檢查單詞是否為句中其他單詞的前綴

1456.定長子串中元音的最大數(shù)目

1457.二叉樹中的偽回文路徑

題目分析

1455.檢查單詞是否為句中其他單詞的前綴

這道題目思路還是比較清晰的,遍歷原字符串敬特,遍歷到空字符或遍歷到最后一位表示遍歷到了一個單詞柔吼,對比給定的單詞毒费,看看是否是其前綴即可。

1456.定長子串中元音的最大數(shù)目

這道題目可以使用滑動窗口的思路愈魏。

首先創(chuàng)建一個數(shù)組觅玻,然后遍歷一遍原字符串溪厘,如果當前字符是元音僻爽,則當前數(shù)組為1秽荤;如果不是元音晨继,則當前數(shù)組為0紊扬。

vector<int> res;
for (auto temp : s) {
    if (temp == 'a' || temp == 'e' || temp == 'i' || temp == 'o' || temp == 'u') {
        res.push_back(1);
    }else res.push_back(0);
}

然后按照給定的k固定好窗口左端和右端啤挎,并計算窗口內(nèi)元音個數(shù)(由于我們將其轉(zhuǎn)換為了01數(shù)組驻谆,其實求和即可):

int left = 0;
int right = k - 1;
int count = 0;
int temp = 0;
for (int i = left; i <= right; i++) {
    temp += res[i];
}
count = count > temp ? count : temp;

然后開始移動窗口兩端,移動的方式也很簡單:

  • 如果當前左指針指向的是元音庆聘,則temp--;
  • 如果當前右指針的下一位指向的是原因胜臊,則temp++
  • 然后左指針和右指針同時向前移動一位伙判,更新count象对。
while (right + 1 < res.size()) {
    if (res[left] == 1) {
        temp--;
    }
    if (res[right + 1] == 1) {
        temp++;
    }
    count = count > temp ? count : temp;
    left++;
    right++;
}

返回count即可。

1457.二叉樹中的偽回文路徑

我這道題采用的是模擬的方式宴抚,首先用回溯算法遍歷所有根節(jié)點到葉子結(jié)點的路徑勒魔,然后檢驗這個路徑是否是偽回文路徑。

回溯算法求根節(jié)點到葉子結(jié)點的路徑:

// res儲存?zhèn)位匚穆窂絺€數(shù)菇曲,path儲存當前路徑
void BackTrack(TreeNode* root, int& res, vector<int>& path) {
    if (!root->left && !root->right) {
        // 找到了葉子結(jié)點冠绢,檢驗這個路徑是不是偽回文
        return ;
    }
    if (root->left) {
        path.push_back(root->left->val);
        BackTrack(root->left);
        path.pop_back();
    }
    if (root->right) {
        path.push_back(root->right->val);
        BackTrack(root->right);
        path.pop_back();
    }
}

然后檢驗是不是回文路徑,其實也很簡單常潮,區(qū)分偶數(shù)和奇數(shù)就可以:

  • 如果路徑元素個數(shù)是偶數(shù)個弟胀,若要構(gòu)成回文,則每一種元素都應(yīng)該是偶數(shù)個喊式;
  • 如果路徑元素個數(shù)是奇數(shù)個孵户,若要構(gòu)成回文,則最多有一種元素可以是奇數(shù)個岔留。
bool isPal(vector<int> s) {
    int len = s.size();
    if (len == 1) return true;
    if (len == 2) return false;
    
    int res = 0;
    sort(s.begin(), s.end());
    for (int i = 0; i < len - 1; i++) {
        if (s[i] == s[i + 1]) i++;
        else {
            res++;
        }
    }
    if (len % 2 == 0) {
        return res == 0;
    }else {
        return res <= 1;
    }
}

最后返回res即可夏哭。


題目解答

1455.檢查單詞是否為句中其他單詞的前綴

class Solution {
public:
    bool isPre(string s, string t, int l, int r) {
        int len = t.length();
        int flag = 0;
        while (flag < len) {
            // printf("%c %c\n", t[flag], s[l]);
            if (t[flag] != s[l]) return false;
            else {
                flag++;
                l++;
            }
        }
        return true;
    }
    int isPrefixOfWord(string sentence, string searchWord) {
        if (sentence.size() < searchWord.size()) return -1;
        
        int n = searchWord.size();
        int left = 0;
        int right = 0;
        int res = 0;
        for (int i = 0; i < sentence.size() + 1; i++) {
            if (sentence[i] == ' ' || i == sentence.size()) {
                res++;
                right = i - 1;
                // printf("%d %d %d\n", left, right, right - left + 1);
                if (right - left + 1 >= n) {
                    if(isPre(sentence, searchWord, left, right)) return res;
                }
                left = i + 1;
            }
            
        }
        
        return -1;
    }
};

1456.定長子串中元音的最大數(shù)目

class Solution {
public:
    int maxVowels(string s, int k) {
        vector<int> res;
        for (auto temp : s) {
            if (temp == 'a' || temp == 'e' || temp == 'i' || temp == 'o' || temp == 'u') {
                res.push_back(1);
            }else res.push_back(0);
        }
        int left = 0;
        int right = k - 1;
        int count = 0;
        int temp = 0;
        for (int i = left; i <= right; i++) {
            temp += res[i];
        }
        count = count > temp ? count : temp;

        while (right + 1 < res.size()) {
            if (res[left] == 1) {
                temp--;
            }
            if (res[right + 1] == 1) {
                temp++;
            }
            count = count > temp ? count : temp;
            left++;
            right++;
        }
        return count;
    }
};

1457.二叉樹中的偽回文路徑

class Solution {
public:
    bool isPal(vector<int> s) {
        int len = s.size();
        if (len == 1) return true;
        if (len == 2) return false;
        
        int res = 0;
        sort(s.begin(), s.end());
        for (int i = 0; i < len - 1; i++) {
            if (s[i] == s[i + 1]) i++;
            else {
                res++;
            }
        }
        if (len % 2 == 0) {
            return res == 0;
        }else {
            return res <= 1;
        }
    }
    
    void PreOrder(TreeNode* root, vector<int>& path, int& res) {
        if ( !root->right && !root->left ){
            if (isPal(path)) res++;
            return ;
        }
        if (root->left) {
            path.push_back(root->left->val);
            PreOrder(root->left, path, res);
            path.pop_back();
        }
        if (root->right) {
            path.push_back(root->right->val);
            PreOrder(root->right, path, res);
            path.pop_back();
        }
    }

    int pseudoPalindromicPaths (TreeNode* root) {
        if (!root) return 0;
        if (!root->left && !root->right) return 1;
        vector<int> path;
        path.push_back(root->val);
        int res = 0;
        PreOrder(root, path, res);
        
        return res;
    }
};
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市贸诚,隨后出現(xiàn)的幾起案子方庭,更是在濱河造成了極大的恐慌,老刑警劉巖酱固,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件械念,死亡現(xiàn)場離奇詭異,居然都是意外死亡运悲,警方通過查閱死者的電腦和手機龄减,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來班眯,“玉大人希停,你說我怎么就攤上這事烁巫。” “怎么了宠能?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵亚隙,是天一觀的道長。 經(jīng)常有香客問我违崇,道長阿弃,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任羞延,我火速辦了婚禮渣淳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘伴箩。我一直安慰自己入愧,他們只是感情好,可當我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布嗤谚。 她就那樣靜靜地躺著棺蛛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪巩步。 梳的紋絲不亂的頭發(fā)上鞠值,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天,我揣著相機與錄音渗钉,去河邊找鬼。 笑死钞钙,一個胖子當著我的面吹牛鳄橘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播芒炼,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼瘫怜,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了本刽?” 一聲冷哼從身側(cè)響起鲸湃,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎子寓,沒想到半個月后暗挑,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡斜友,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年炸裆,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鲜屏。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡烹看,死狀恐怖国拇,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情惯殊,我是刑警寧澤酱吝,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站土思,受9級特大地震影響务热,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜浪漠,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一陕习、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧址愿,春花似錦该镣、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至娘纷,卻和暖如春嫁审,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背赖晶。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工律适, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人遏插。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓捂贿,卻偏偏與公主長得像,于是被迫代替她去往敵國和親胳嘲。 傳聞我的和親對象是個殘疾皇子厂僧,可洞房花燭夜當晚...
    茶點故事閱讀 42,828評論 2 345