首页 > 其他分享 >2道寻找回文子串的题目

2道寻找回文子串的题目

时间:2024-06-06 15:35:06浏览次数:20  
标签:子串 题目 int res 字符串 回文

题目

题目1

题目2
image

题目1是将字符串分隔,使得分隔后得到的每个字符串都是回文子串
题目2是从字符串里面找到回文子串
两道题都可以利用递归来解决

//利用双指针判断是否是回文子串
bool isre(string& s)
{
	int left = 0;
	int right - s.size()-1;
	while(left <= right)
	{
		if(s[left]!=s[right]) return false;
	}
	return true;
}

题目1解法

除了递归还需要使用回溯,即采用深度搜索,将一次寻找结束后,将倒退,修改分割方法继续寻找匹配

//两个数组,一个存储最终结果,一个存储一次遍历的结果
vector<vector<string>> res;
vector<string> path;

//k是每次搜索的起始位置
void getRes(string& s,int k)
{
	//当起始位置到达末尾,将path结果添加到res数组中
	if(k == s.size()) 
	{
		res.push_back(res);
		return;
	}
	//从第K个位置开始计算字符串
	for(int i = k;i<s.size();i++)
	{
		string check = s.substr(k,i-k+1);
		if(isre(check))
		{
			path.push_back(check);
			//对之后的字符串进行分割
			getRes(s,i+1);
			//这轮字符串搜索完之后,回溯
			path.pop_back();
		}
	}
}

题目2

需要注意的就是处理重复的情况,比如一个字符串全是a的情况。
当寻找到一个回文子串就可以将其添加到结果数组中

vector<string> res;
unordered_set<string> path; // 用来避免重复

void getRes(string& s, int k)
{
	if(k == s.size()) return; //遍历完字符串,说明寻找完了
	for(int i = k;i<s.size();i++)
	{
		string check = s.substr(k,i-k+1);
		if(isre(check) && path.find(check) == path.end())
		{
			res.push_back(check);
			path.emplace(check);
			//从k+1开始搜索下一个回文子串
			getRes(s,k+1);
		}
	}
}

标签:子串,题目,int,res,字符串,回文
From: https://www.cnblogs.com/XTG111/p/18235214

相关文章

  • oop-PTA题目集4~6总结
    一、前言   相比于前三次的题目集,题目集4~6需要用到的新的知识点主要是面向对象程序设计中继承和多态这两个特性的使用。第四次题目集中的答题判题程序-4是在前三次程序的基础上增加新的内容,新增了选择题和填空题两种题型,这一变化的处理需要用到前三次未使用的继承,即将题目......
  • 2种方法解决需要clik点击数的题目——[HNCTF 2022 WEEK2]getflag 137分 MFC patch RE
    题目   DIEIDA找到判断点击数的if,我们修改一下汇编指令让点击数<99999999就成立这个程序没有要求我们输入,说明flag是程序打印的IDA动调 下一个断点修改 得到flag  还有一种更快的方法——CheatEngine 随便点击几次 在CE中修改点击次数 Getf......
  • 最小覆盖子串
    Problem:76.最小覆盖子串目录思路解题方法复杂度Code思路滑动窗口很简单解题方法滑动窗口复杂度时间复杂度:添加时间复杂度,示例:$O(n)$空间复杂度:添加空间复杂度,示例:$O(n)$CodefuncminWindow(sstring,tstring)string{ result:="" //剔......
  • CSP历年复赛题-P2010 [NOIP2016 普及组] 回文日期
    原题链接:https://www.luogu.com.cn/problem/P2010题意解读:计算两个日期之间有多少个日期是回文。解题思路:如果通过枚举两个日期之间的所有日期,然后判断回文,则会有几个问题:枚举数据规模在10^7级别,再加上对于日期加一天、判断回文等处理,有可能超时,而且对日期进行加一天、判断回......
  • Android课程设计课题题目推荐(安卓期末大作业,毕业设计,Androidstudio)
    博主介绍:本人专注于Android/java/数据库/微信小程序技术领域的开发,以及有好几年的计算机毕业设计方面的实战开发经验和技术积累;尤其是在安卓(Android)的app的开发和微信小程序的开发,很是熟悉和了解;本人也是多年的Android开发人员;希望我发布的此篇文件可以帮助到您;......
  • C++课程设计杭电题目(中)
    2073.无限的路题目描述http://acm.hdu.edu.cn/showproblem.php?pid=2073http://acm.hdu.edu.cn/showproblem.php?pid=2073ProblemDescription甜甜从小就喜欢画图画,最近他买了一支智能画笔,由于刚刚接触,所以甜甜只会用它来画直线,于是他就在平面直角坐标系中画出如下的图形:......
  • Trie字典树和AC自动机 (题目&答案)
    A.三年二班的投票题目描述三年级二班已经完成了竞选班长的投票,已知一共有n张投票,每张投票上写了一位同学的名字。投票统计结束后,张老师随意问一个同学的名字,请编程快速检索出,该同学共有几票。输入第一行读入一个整数n,代表产生了n张投票。(n≤)接下来n行,每行有一......
  • 题目集4-6的总结性Blog
    一.前言:在这几周,我们又进行了3次pta的题目训练。首先是答题程序的最后一次迭代,答题程序-4,接着就是新的迭代,家居电路模拟程序。经过一段时间的学习,我对面向对象设计的理解进一步加深,这三次题集写起来也没有之前那么困难了,虽然还有不足,我仍在一次次答题中学到了很多。以下是我的初......
  • 【数据结构与算法 经典例题】链表的回文结构(图文详解)
                  ......
  • 第2次总结性Blog-题目集4~6
    目录前言设计与分析采坑心得改进建议总结关于java&面向对象  在经过这几个月的系统性的java学习中,我始终牢记着一句话:面对对象程序设计最重要的是设计,而不是代码。设计即要遵守单一职责原则,简单来说就是什么该做,什么不该做。设计的越好,复用性就越高,需要修改代码的量就......