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