class Solution {
public:
string longestPalindrome(string s) {
if(s=="")
return s;
int len = s.size();
string s1;
for(int i=0;i<len;i++){
s1+="#";
s1+=s[i];
}
s1+="#";
len = s1.length();
int maxright=0,pos=0;
int maxr = 0,maxpos=0;
int * r = new int [len];
memset(r,0,sizeof(r));
for(int i=0;i<len;i++){
if(i<maxright)
r[i]=min(r[2*pos-i],maxright-i);
else
r[i]=1;
while(i-r[i]>=0&&i+r[i]<len&&s1[i-r[i]]==s1[i+r[i]])
r[i]++;
if(i+r[i]>maxright){
maxright = i+r[i];
pos = i;
}
if(r[i]>maxr){
maxr = r[i];
maxpos = i;
}
}
return s.substr((maxpos-maxr+1)/2,maxr-1);
}
};
class Solution {
public:
int minDistance(string word1, string word2) {
int n = word1.length();
int m = word2.length();
if (n * m == 0) return n + m;
int D[n + 1][m + 1];
for (int i = 0; i < n + 1; i++) {
D[i][0] = i;
}
for (int j = 0; j < m + 1; j++) {
D[0][j] = j;
}
for (int i = 1; i < n + 1; i++) {
for (int j = 1; j < m + 1; j++) {
int left = D[i - 1][j] + 1;
int down = D[i][j - 1] + 1;
int left_down = D[i - 1][j - 1];
if (word1[i - 1] != word2[j - 1]) left_down += 1;
D[i][j] = min(left, min(down, left_down));
}
}
return D[n][m];
}
};
class Solution {
public:
int rob(vector<int>& nums) {
if(nums.empty())
return 0;
if(nums.size() == 1)
return nums[0];
else if(nums.size() == 2)
return max(nums[0], nums[1]);
int p = nums[0], q = max(p, nums[1]);
for(int i = 2; i < nums.size(); i++){
p = max(nums[i] + p, q);
int tmp = p;
p = q;
q = tmp;
}
return q;
}
};
class Solution {
public:
int rob(vector<int>& nums) {
if (nums.size() == 0)
return 0;
if (nums.size() <= 3)
return *max_element(nums.begin(), nums.end());
vector<int> dp1(nums.size(), 0);//rob house0
vector<int> dp2(nums.size(), 0);//not rob house0
dp1[0] = nums[0];
dp1[1] = nums[1];
dp1[2] = nums[2] + nums[0];
dp2[1] = nums[1];
dp2[2] = nums[2];
dp2[3] = nums[3] + nums[1];
for (int i = 3; i < nums.size(); i++)
{
if (i == 3)
dp1[i] = max(dp1[i - 2], dp1[i - 3]) + nums[i];
else if (i == nums.size() - 1)
dp2[i] = max(dp2[i - 2], dp2[i - 3]) + nums[i];
else
{
dp1[i] = max(dp1[i - 2], dp1[i - 3]) + nums[i];
dp2[i] = max(dp2[i - 2], dp2[i - 3]) + nums[i];
}
}
int result = max(dp1[nums.size() - 2], dp1[nums.size() - 3]);
result = max(result, dp2[nums.size() - 2]);
result = max(result, dp2[nums.size() - 1]);
return result;
}
};
class Solution {
public:
int longestPalindromeSubseq(string s) {
string temp(s.rbegin(), s.rend());
vector<vector<int>> dp(s.size()+1, vector<int>(s.size()+1, 0));
for(int i = 1; i <= s.size(); i++){
for(int j = 1; j <= s.size(); j++){
if(s[i-1] == temp[j-1]) dp[i][j] = dp[i-1][j-1] + 1;
else dp[i][j] = max(dp[i-1][j], dp[i][j-1]);
}
}
return dp[s.size()][s.size()];
}
};
class Solution {
public int findLengthOfLCIS(int[] nums) {
if(nums.length <= 1)
return nums.length;
int ans = 1;
int count = 1;
for(int i=0;i<nums.length-1;i++) {
if(nums[i+1] > nums[i]) {
count++;
} else {
count = 1;
}
ans = count > ans ? count : ans;
}
return ans;
}
}
作者:guanpengchn
链接:https://leetcode-cn.com/problems/longest-continuous-increasing-subsequence/solution/hua-jie-suan-fa-674-zui-chang-lian-xu-di-zeng-xu-l/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。