Loading

leetcode解题记录(二)

leetcode14:最长公共前缀

问题描述:
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。
示例1:
输入: ["flower","flow","flight"]
输出: "fl"

示例2:
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。

说明:
所有输入只包含小写字母 a-z 。
思路: 首先找出数组中长度最短的字符串,该字符串一定包含或等于最长公共前缀。定义一个空字符串s,从第一个字符串开始与最短字符串比较,若对应字符相符,s加上该字符。否则直接返回s。代码如下:

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        string s = "";
        if(strs.empty())    return "; //输入为空,输出空字符串
        string min = strs[0];
        for(int i = 1; i < strs.size(); i++) //找到最短字符串
        {
            if(strs[i].size() < min.size())
                min = strs[i];
        }
        for(int j = 0; j < min.size(); j++) //从第一个字符开始对比,若都一样,s加上该字符
        {
            for(int m = 0; m < strs.size(); m++)
            {
                if(min[j] != strs[m][j])
                    return s;
            }
            s = s + min[j];
        }
        return s;
    }
};

leetcode20:有效的括号

问题描述:
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例1:
输入: "()[]{}"
输出: true

示例2:
输入: "([)]"
输出: false

思路: 核心思想遍历字符串,左括号入栈,遇到右括号,则看是否与栈顶元素括号匹配,如果不匹配,则输出false

class Solution {
public:
    bool isValid(string s) {
       //核心思想遍历字符串,左括号入栈,遇到右括号,则看是否与栈顶元素括号匹配,如果不匹配,则输出false 。遍历完需要检查栈是否为空
        if (s.empty())
            return true;
       stack<char> stack;
       for(int i=0;i<s.size();i++)
       {
           if (s[i] == '(' || s[i] == '[' || s[i] == '{')
            {
                stack.push(s[i]);
            }
           else{
                if(stack.empty())
                    return false;

               if ((s[i]==')' && '('!=stack.top()) || (s[i]==']' && '['!=stack.top()) || ((s[i]=='}' && '{'!=stack.top())))
                    {return false;}
                     stack.pop();
           }
       }
         if(stack.empty())
            return true;
        else
            return false;
    }
};
posted @ 2020-02-06 14:53  XiaoJ_c  阅读(7)  评论(0编辑  收藏  举报