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;
}
};