当前位置: 首页 > news >正文

天梯赛 L2-008 最长对称子串 (天梯赛常用string函数)

使用substr和reverse的一种写法,很奇怪能过,时间复杂度n3

关于string常用函数的用法:

1.isalpha(char ch) : 判断某个字符是不是字母,如果是返回值非0,反之返回值为0。

2.isdigit(char ch) :判断某个字符是不是数字,若是返回非0,反之返回0

3.isalnum(char ch) :判断某个字符是不是数字或者字母,若是返回非0

4.islower(char ch) :判断某个字符是不是小写字母,若是返回非0

5.isupper(char ch) :判断某个字符是不是大写字母,若是返回非0

6.tolower(int ch) :把ch转化成对应的小写字符并且作为返回值返回大写字母的ASCII码

7.toupper(int ch) : 把ch转化成对应的大写字符并且作为返回值返回小写字母的ASCII码

8. .insert(pos,char):在制定的位置pos前插入字符char,如:s1.insert(s1.begin(),'1');

9. erase(iterator p);//删除字符串中p所指的字符,erase(iterator first, iterator last);//删除字符串中迭代器区间[first,last)上所有字符,erase(int pos , int len);//删除字符串中从索引 位置pos开始的len个字符,

10 . s.clear() 删除s中所有字符

11 s.replace()具体用法如下

void solve() {
	string s = "hello world!";
	int len = s.size();
	
	s.replace(len-2,1,".");	//将当前字符串从len-1索引开始的1个字符替换为字符串"."
	
	s = "hello world!";
	s.replace(len-1,1,2,'.');//将当前字符串从len-1索引开始的1个字符替换为2个字符'.'

	s = "hello world!";
	//将当前字符串从s.begin()开始到s.begin()+5替换为"nihao"
	s.replace(s.begin(),s.begin()+5,"nihao");
	cout<<s<<endl;
}

12. s.find()具体用法如下所示,其中找不到返回string::npos:

void solve() {
	string s = "hello world!";
	
	int idx = s.find("lo");//查找"lo"在s中出现的第一个下标
	cout<<idx<<endl;
	
	idx = s.find('l',4); //从下标4(包括)开始查找第一个'l'的下标
	cout<<idx<<endl;
	
	if(s.find("a") == string::npos){//找不到返回string::npos
		cout<<"未找到"<<endl;
	}
}

13 rfind(),用法与find类似

cout<<s.rfind('l',8);	//从所以为8(包括)的位置从后向前找

14 find_first_of(string s, int pos) :在源串中从位置pos起往后查找,只要在源串中遇到一个字符,该字符与目标串中任意一个字符相同,就停止查找,返回该字符在源串中的位置;若匹配失败,返回npos。

	cout<<s.find_first_of("ao")<<endl;//返回o的位置

15 find_last_of(string s,int pos) : 在源串中从位置pos起从后向前查找,只要在源串中遇到一个字符,该字符与目标串中任意一个字符相同,就停止查找,返回该字符在源串中的位置;若匹配失败,返回npos。

16 find_first_not_of(string s,int pos ) :  在源串中从位置pos开始往后查找,只要在源串遇到一个字符,该字符与目标串中的任意一个字符都不相同,就停止查找,返回该字符在源串中的位置;若遍历完整个源串,都找不到满  足条件的字符,则返回npos。

17 find_last_not_of():查找顺序是从指定位置向前。

18 reverse(),reverse(str.begin(), str.end());翻转字符串

19. s.substr(pos, len):返回值: string,包含s中从pos开始的len个字符的拷贝。pos的默认值是0,len的默认值是s.size() - pos,即不加参数会默认拷贝整个s。

s1 = s.substr(pos):截取从pos开始到结尾的字符串。

#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
typedef long long ll;
const int N = 10100;
const int mod = 998244353;
void solve() {
	string s;
	getline(cin,s);
	int ans = 1;
	for(int i = 1 ; i <= s.size() ; i++){
		for(int j = 0; j <= s.size() - i; j++ ){
			string s1 = s.substr(j,i);
			string rs1 = s1;
			reverse(rs1.begin(),rs1.end());
			if(s1 == rs1){
				ans = max(ans,i);
			}
		}
	}
	cout<<ans<<endl;
}
signed main() {
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    int tt = 1;
    //    cin >> tt;
    while (tt--) {
        solve();
    }
    return 0;
}

第二种写法是枚举i,然后想两边扩散,需要考虑两种情况,一种是长度为奇数,一种是长度为偶数。

#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
typedef long long ll;
const int N = 10100;
const int mod = 998244353;
void solve() {
	string s;
	getline(cin,s);
	int ans = 1;
	//枚举i,然后向两边扩展
	//有两种情况,一种长度为奇数、一种为偶数
	for(int i = 0 ; i < s.size() ; i++){
		int l = i-1,r = i+1;
		while(l >= 0 && r < s.size() && s[l] == s[r]){
			l--;
			r++;
		}
		l++,r--;
		ans = max(ans,r-l+1);
		//长度为偶数
		l = i,r = i+1;
		while(l >= 0 && r < s.size() && s[l] == s[r]){
			l--;
			r++;
		}
		l++,r--;
		ans = max(ans,r-l+1);
	}
	cout<<ans<<endl;
}
signed main() {
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    int tt = 1;
    //    cin >> tt;
    while (tt--) {
        solve();
    }
    return 0;
}

相关文章:

  • Stable Diffusion lora训练(一)
  • 为什么要学习人工智能(AI)?—— 未来已来,AI引领时代变革
  • 第二十八篇 数据获取与数据分析:数仓体系下的专业化分工与协同
  • IIC读写EEPROM
  • 基于springboot医疗平台系统(源码+lw+部署文档+讲解),源码可白嫖!
  • 基于物联网的便携式土壤综合参数检测仪设计
  • MySQL外键约束下的索引删除难题:从报错到完美解决的实战指南
  • 医疗数据大集结
  • deepseek本地化部署
  • MySQL主从同步面试核心20问:从原理到实战深度拆解
  • System V共享内存详解:在Linux上实现内存共享的最佳实践
  • Powershell WSL部署ubuntu22.04.5子系统
  • 深入 Linux 声卡驱动开发:核心问题与实战解析
  • STM32:Default_Handler问题
  • 深入解析 C++ Vector:全面掌握 STL 核心容器的原理与高效实践
  • Mybatis事务
  • git相关操作
  • 基于deepseek的智能语音客服【第二讲】后端异步接口调用封装
  • Python 获取显存信息
  • Dubbo(3)Dubbo的工作原理是什么?
  • 五一去哪玩?“时代交响”音乐会解锁艺术假期
  • 车展之战:国产狂飙、外资反扑、智驾变辅助
  • 美国务院宣布新一轮与伊朗相关的制裁
  • 范宇任上海宝山区副区长
  • 专访 | 杜普兰蒂斯:爱上中国文化,下一步努力提升速度
  • 白玉兰奖征片综述丨国产剧集创作的此消彼长