1.有效的括号
给定一个只包括”(“,”)“,”{“,”}“,”[“,”]“的字符串,判断字符串是否有效。
有效字符串需满足:左括号必须用相同类型的右括号闭合,左括号必须以正确的顺序闭合。
思路:利用栈来实现
2.实现strStr()
给定一个haystack字符串和一个needle字符串,在haystack字符串中找出needle字符串出现的第一个位置(从0开始)。如果不存在则返回-1。如果needle串为空,则返回0。
思路:遍历。
3.报数
报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。
思路:计数问题+动态规划
string countAndSay(int n) {
if(n == 1)
{
return "1";
}
vector<string> dp;
dp.push_back("1");
dp.push_back("11");
for(int i = 2; i < n; i++)
{
int count = 1;
char previous_item = dp[i - 1][0];
string element = "";
for(int j = 1; j < dp[i - 1].length(); j++)
{
if(dp[i - 1][j] == previous_item)
{
count++;
}
else
{
element += to_string(count) + previous_item;
previous_item = dp[i - 1][j];
count = 1;
}
}
element += to_string(count) + previous_item;
dp.push_back(element);
}
return dp[dp.size() - 1];
}
4.最后一个单词的长度
给定一个仅包含大小写字母和空格的字符串,返回其最后一个单词的长度。如果不存在最后一个单词,则返回0。
思路:从后向前遍历
5.二进制求和
给定两个二进制字符串,返回它们的和(用二进制表示)。输入为非空字符串且只包含数字1或0。
思路:类似大数相加