LeetCode 第 190 场周赛

1455. 检查单词是否为句中其他单词的前缀

题目链接:点击这里

LeetCode 第 190 场周赛_第1张图片
LeetCode 第 190 场周赛_第2张图片

思路:将句子中的所有单词拿出来,判断给定单词是否是其前缀即可。

class Solution {
public:
    int isPrefixOfWord(string sentence, string searchWord) {
        int lens = sentence.length();
        sentence[lens] = ' ';
        string t = "";
        int cnt = 0;
        for(int i = 0; i <= lens; i++)
        {
            if(sentence[i] == ' ')
            {
                cnt++;
                // cout << cnt << " " << t << endl;
                if(t.find(searchWord) == 0) return cnt;
                t = "";
            }
            else
                t += sentence[i];
        }
        return -1;
    }
};

1456.定长子串中元音的最大数目

题目链接:点击这里

LeetCode 第 190 场周赛_第3张图片
LeetCode 第 190 场周赛_第4张图片

思路:滑动窗口。

class Solution {
public:
    int judge(char c) {
        if(c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u') {
            return 1;
        }
        return 0;
    }

    int maxVowels(string s, int k) {
        int len = s.length();
        int ans = -1, cnt = 0;
        for(int i = 0; i < len; i++) {
            cnt += judge(s[i]);
            if(i >= k)  cnt -= judge(s[i - k]);
            if(i >= k - 1)  ans = max(ans, cnt);
        }
        return ans;
    }
};

257. 二叉树的所有路径

题目链接:点击这里

LeetCode 第 190 场周赛_第5张图片

将数字值转换为字符串:

将字符串转换为数字:

AC代码:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    void dfs(TreeNode* cur, string path, vector<string>& ans) {
        if(!cur->left && !cur->right) {
            ans.push_back(path);
            return;
        }

        if(cur->left)   dfs(cur->left, path + "->" + to_string(cur->left->val), ans);

        if(cur->right)  dfs(cur->right, path + "->" + to_string(cur->right->val), ans);
    }

    vector<string> binaryTreePaths(TreeNode* root) {
        vector<string> ans;
        if(!root)   return ans;

        string path = to_string(root->val);

        dfs(root, path, ans);

        return ans;
    }
};

1457.二叉树中的伪回文路径

题目链接:点击这里

LeetCode 第 190 场周赛_第6张图片
LeetCode 第 190 场周赛_第7张图片

思路:根据回文序列的性质,其中每个字符的个数是有要求的,最多只能有 1 1 1 个字符个数是奇数(放在最中间), 其他字符都必须是偶数个。当然也可以所有字符都是偶数个,即对称中心是两字符的中间,而不是某个字符本身。

我们可以 dfs 遍历,得到所有根节点到叶子节点的路径(即补充的上一题),遍历过程中维护一个map统计字符个数,判断是否满足回文序列的要求即可。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    unordered_map<int, int> h;
    int ans = 0;

    void dfs(TreeNode* root) {
        if(!root)   return;

        h[root->val]++;

        if(!root->left && !root->right) {
            int odd = 0;
            for(auto it : h)
                if(it.second & 1)
                    odd++;
            if(odd <= 1)    ans++;
        }

        dfs(root->left);
        
        dfs(root->right);
        
        h[root->val]--;
    }

    int pseudoPalindromicPaths (TreeNode* root) {
        dfs(root);
        return ans;
    }
};

1458.两个子序列的最大点积

题目链接:点击这里

不会,留着填坑~

你可能感兴趣的:(LeetCode)