最长回文子串/ag
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: “babad”
输出: “bab”
注意: “aba” 也是一个有效答案。
示例 2:
输入: “cbbd”
输出: “bb”
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
bool cmp(string a, string b){
return a.size() > b.size();
}
int main(){
string s;
string a[200];
int k = 0;
cin >> s;
for (int i = 0; i < s.size(); i++){
string s1;
s1 = s[i];
for (int j = i + 1; j < s.size(); j++){
s1.push_back(s[j]);
string s2(s1.rbegin(), s1.rend());//别忘了括号啊!!!
if (s1 == s2){
a[k++] = s1;
}
}
}
sort(a,a+k,cmp);//排序
/*int max = a[0].size(), j = 0;//或者这样选出最长的
for (int i = 0; i < k; i++){
if (a[i].size() > max){
max = a[i].size();
j = i;
}
}*/
cout << a[0];
cin >> s;
}
无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
示例 2:
输入: “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
示例 3:
输入: “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main(){
string s, s1;//s1存储子串
cin >> s;
int max = 1;//最大不重复子串长度
for (int i = 0; i < s.size(); i++){
//如s=abcabd,i=2时
s1.push_back(s[i]);//s1=c
int n = 1;//当前不重复子串长度
for (int j = i + 1; j < s.size(); j++){
if (s1.find(s[j]) == string::npos){
//在s1=c中找a,如果没有找到
n++;//个数加一
s1.push_back(s[j]);//s1=ca,再循环,在ca中找b
}
else break;//如果找到了,跳出循环
}
if (n > max) max = n;
s1.clear();
}
cout << max;
}
字符串操作,输入字符串,提取其中的数字并相加,在屏幕上显示结果,比如输入dfd56hj5hjkk9kk7,应该在屏幕上显示:56+5+9+7=77.
#include<iostream>
#include<string>
using namespace std;
int main(){
string s;
int n = 0, a, k = 0;
int num[20] = {
0 };
getline(cin, s);//可接受空格
//遍历找数
for (int i = 0; i < s.size();){
a = 0;
while (s[i] >= '0'&&s[i] <= '9'){
//把连续数字暂存在a里,ssda15kkk,把15存在a里
a = a * 10 + s[i]-'0';
i++;
}
if (a != 0){
//如果a中有数,存到num[],k记录下标
num[k] = a;
k++;
}
if (a == 0) i++;//如果a[i]非数字,i++
n = n + a;//n为总和
}
//输出
for (int i = 0; i < k; i++){
cout << num[i];
if (i < k <