数据结构与算法之string篇

来源:互联网 发布:一直播如何挂淘宝链接 编辑:程序博客网 时间:2024/06/05 14:29

string

一、定义

二、操作

成员函数(方法):append
非成员函数:prev  fill

三、题型分析

1.回文序列

1)判断字符串是否为回文字符串
string s;
cin>>s;
auto a=s.begin(); auto b=prev(s.end());
while(a<b)
{
if(!::isalnum(*a))  a++;
else if(!::isalnum(*b))  b--;
esle if(*a!=*b) return false;
else
{
a++;b--;
}
}

2.模式匹配

1)暴力枚举法
string s1;string s2;
cin>>s1>>s2;
if(s1.empty()) return 0;
const int N=s1.size()-s2.size();
for(int i=0;i<N;i++)
{
int j=i; int k=0;
while(j<s1.size() && k<s2.size() && s1[j]==s2[k])
{
j++;
k++;
}
if(k==s2.size()) return i;
}
2)KMP算法

3.子序列问题

1)全排列
2)组合

4.类型转换

1)string to int(stoi)
int myAtoi(const string &str)
{
int num=0;int sign=1;
const int n=str.lengh();
int i=0;
while(str[i]==' '&&i<n) i++;
if(str[i]=='+') i++;
else if(str[i]=='-')
{
sign=-1;
i++;
}
for(;i<n;i++)
{
if(str[i]<'0' || str[i]>'9')
break;
if(num>INT_MAX/10 || (num==INT_MAX/10 && (str[i]-'0')>INT_MAX%10))
{return sign==-1?INT_MIN:INT_MAX;}
num=num*10+str[i]-'0';
}
return num*sign;
}
2)string类自带类型转换函数
to_string()  stoi()  stol()  stoll()  stoul() 

5.字符串类动态规划

1)字符串相似度/编辑距离(edit distance)

滚动数组?
同类问题:n*m矩阵中的最短/最长路径
2)子串匹配

3)最长公共子序列

4)最长递增子序列

5)最大连续子序列和/积

6)矩阵链乘法

6.面试题汇总

1)替换空格