【三次集训】day10字符串习题训练

A - 最长回文

题目大意:

题目给出多个字符串,让输出每个字符串的最长回文子串的长度

思路:

回文子串模板题,求最长回文子串我还没有写过,一会自己写一次

  1. 首先,暴力方法:求每一个子串时间复杂度O(n * n),判断子串是不是回文O(N),两者是相乘关系,所以时间复杂度为O(n * n * n)。
  2. 动态规划法和中心扩展法,复杂度都是O(n*n),其中,中心规划法就是从中间向两头搜索回文子串
  3. 最厉害的求回文子串的方法:马拉车Manacher法,时间复杂度为O(n)。

B - 奇偶位互换

题目大意:

给你一字符串,让你实现其奇偶位置互换

思路:

模拟,水题,过了

C - Number Sequence

题目大意:

给你两个序列a和b,让你在a中找是否有(连续)子列等于b序列,有的话输出其最早出现的位置,没有的话输出-1。

思路:
  1. 和kmp算法有点相似,kmp就是求一个序列是否包含另一个序列,并输出最早出现的位置的
  2. 后来发现不能单纯整数+48转成字符数组导致wa了,把str和pty分别改称int数组之后就AC了
  3. 此题收获了kmp算法的模板:https://blog.csdn.net/starstar1992/article/details/54913261

E - 单词数

题目大意:

多组数据,每组一行,没有标点符号,以#结尾,问你一组有多少单词

思路:
  1. 模拟,用set+标准化单词防重复呗,有什么坑吗?
  2. 没坑,数据范围没有就等于数据不强,不用开太大就能A了,我开到一万零五反而MLE了

G - Count the string

题目大意:

多组数据,给你一个字符串,让你找出他所有非空前缀子串在字符串中出现的次数之和。例如abab的所有非空前缀子串为:a,ab,aba,abab,其中a在整个字符串中出现过2次,ab出现过2次,aba出现过1次,abab出现过一次,所以答案为2+2+1+1=6

思路:
  1. 暴力搜索,处理每组数据的时间复杂度为O(nnn)您可真棒!
  2. 果断参考网友意见,这里涉及到一个求子串在原字符串中出现位置的算法kmp算法,这个算法能把处理每个子串需要的时间O(nn)换成O(n+n),这时整个问题只需要O(n(n+n))的时间了
  3. 了解了,一下next数组的用法,关于怎么得出此题结果的还有待研究
  4. 过是过了,这题有一个我很不理解的bug,我的头文件是:
#include
#include
#include
#include

然后不管哪个编译器都编译不通过,而给成别人的头文件:

#include
#include

就能A了,我试过单独去掉cmath,不行,单独把cstring改成string.h,也不行,这我就很不懂了

总结

  1. 别忘了写STL——string的笔记
  2. 我觉得我跟协会里男生的交流很少,我总有一种必须要巴结谁才能融入A协的感觉,因为大家都是成年人了,说纯洁友谊很多人是不相信的,哎好希望数学系的朋友能来和我玩啊。无所谓了,在我还没被需要之前,这些都不重要

你可能感兴趣的:(【三次集训】)