leetcode-5-最长回文子串 题型:动态规划 难度:中等 题目:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 代码:
//动态规划dp[i][j]表示i~j范围的字符串,如果满足回文,那么dp[i+1][j-1]一定也是回文,并且两边加上相同的字符也是回文classSolution{public:
string longestPalindrome(string s){int nlen = s.size();
vector<vector<int>>dp(nlen,vector<int>(nlen,0));
string res ="";for(int i=1;i<=nlen;i++)//长度{for(int left=0;i+left-1<nlen;left++)//满足长度i的,所有左边界{int right = left+i-1;//右边界if(i ==1)//只有当前一个字符{
dp[left][right]=1;}elseif(i ==2)//有两个字符,判断这两个字符是否相等{
dp[left][right]=(s[left]==s[right]);}else{if(s[left]== s[right]&& dp[left+1][right-1]==1)
dp[left][right]=1;}//和上一次记录的字符串对比,选择长度较大的if(dp[left][right]==1&& i>res.size()){
res = s.substr(left,i);}}}return res;}};
leetcode-984-不含AAA或BBB的字符串 题型:字符串 难度:中等 题目:给定两个整数 A 和 B,返回任意字符串 S,要求满足:S 的长度为 A + B,且正好包含 A 个 ‘a’ 字母与 B 个 ‘b’ 字母; 子串 ‘aaa’ 没有出现在 S 中; 子串 ‘bbb’ 没有出现在 S 中。
//让长度长的字符先开始classSolution{public:
string strWithout3a3b(int A,int B){
string res ="";char a,b;if(A >= B){
a ='a';
b ='b';}else{
A = A^B;
B = A^B;
A = A^B;
a ='b';
b ='a';}while(A || B){if(A){
res += a;
A--;}if(A > B){
res += a;
A--;}if(B){
res += b;
B--;}}return res;}};