LeetCode刷题总结-字符串篇
本文梳理对LeetCode上有关字符串习题的知识点,并给出对应的刷题建议。本文建议刷题的总数为32题。具体知识点如下图:
1.回文问题
class Solution {
public:
string longestPalindrome(string s) {
int n = s.size();
vector<vector<int>> dp(n, vector<int>(n));
string ans;
for (int l = 0; l < n; ++l) {
for (int i = 0; i + l < n; ++i) {
int j = i + l;
if (l == 0) {
dp[i][j] = 1;
}
else if (l == 1) {
dp[i][j] = (s[i] == s[j]);
}
else {
dp[i][j] = (s[i] == s[j] && dp[i + 1][j - 1]);
}
if (dp[i][j] && l + 1 > ans.size()) {
ans = s.substr(i, l + 1);
}
}
}
return ans;
}
};
2.子串问题(类似子集)
思路:
如果存在这样的特殊序列,那么它一定是某个给定的字符串。
检查每个字符串是否是其他字符串的子序列。如果不是,则它是一个特殊序列。最后返回长度最大的特殊序列。如果不存在特殊序列,返回 -1。
具体代码:
3.表达式求值问题
4.语法分析器问题(编译原理)
5.字符转换和交换问题
6.验证IP地址问题
7.模式匹配问题
8.正则表达式问题(匹配问题)
9.递归/回溯思想求解
10.特定遍历替换
11.字符串插入、删除、串联和排列问题