随笔分类 - 算法-字符串
摘要:题目:给定一系列的字符串,找出这些字符串的最长公共前缀。解法:暴力法,依次比较每个字符串的每个字符,碰到第一个不同的就返回之前找到的前缀。代码: 1 class Solution { 2 public: 3 string longestCommonPrefix(vector &strs) {...
阅读全文
摘要:题目:正则表达式的匹配,'.'能匹配任何一个字符,'*'之前必须有一个字符,两个结合起来表示之前那个字符出现0到无穷次。解法:一定要注意'*'必须结合前面的字符一起使用。代码: 1 class Solution { 2 public: 3 bool isMatch(const char *s...
阅读全文
摘要:题目:字符串转换为数字。解法:这道题的意思是要考虑到,如果有前置的空字符,则跳过;如果超出数字范围,则返回最大/最小整数;如果碰到第一个不能转换的字符,则返回。代码: 1 class Solution { 2 public: 3 int atoi(const char *str) { 4 ...
阅读全文
摘要:题目:把一个字符串按照Z型排列后打印出来,例如"PAYPALISHIRING" 重新排列后为3行,即P A H NA P L S I I GY I R那么输出为"PAHNAPLSIIGYIR"解法:细节实现题,假如重新排列为5行,那么排列后的下标分布应该为0 8 ...
阅读全文
摘要:题目:给定一个字符串S,返回S中最长的回文子串。S最长为1000,且最长回文子串是唯一。解法:①遍历,对于每个字符,计算以它为中心的回文子串长度(长度为奇数),同时计算以它和右边相邻字符为中心的回文子串长度(长度为偶数)。时间为O(N2)。②另外,有一个很奇妙的算法,称为Manacher算法,参考h...
阅读全文
摘要:题目:给定一个字符串,返回其中不包含重复字符的最长子串长度。解法:维持两个指针,第一个指向子串开始,第二个负责遍历,当遍历到的字符出现在子串内时,应计算当前子串长度,并更新最长值;然后第一个指针更新为出现位置的下一个。代码: 1 class Solution { 2 public: 3 in...
阅读全文