classSolution{public:
string firstPalindrome(vector<string>& words){for(auto& s:words){int l =0, r = s.size()-1;int flag =1;while(l < r){if(s[l]!= s[r]){
flag =0;break;}
l++;
r--;}if(flag ==1)return s;}return"";}};
2.模拟
classSolution{public:
string addSpaces(string s, vector<int>& spaces){
string ans;int loc =0;for(int i =0; i < spaces.size(); i++){while(loc < spaces[i]){
ans += s[loc++];}
ans +=' ';}while(loc < s.size()){
ans += s[loc++];}return ans;}};
3.dp
classSolution{public:longlonggetDescentPeriods(vector<int>& p){longlong ans =0;int n = p.size();
vector<int>dp(n,1);for(int i =1; i < n; i++){if(p[i -1]- p[i]==1){
dp[i]= dp[i -1]+1;}}for(int i =0; i < n; i++){
ans += dp[i];}return ans;}};
4.LIS二分解法
classSolution{public:/*int lengthOfLIS(vector<int>& nums) {
vector<int> minnums;
for(int v : nums)
{
auto pos = upper_bound(minnums.begin(), minnums.end(), v);
if(pos == minnums.end()) {
minnums.push_back(v);
} else {
*pos = v;
}
}
return minnums.size();
}*/intkIncreasing(vector<int>& a,int k){int n = a.size();//cout << n << endl;int ans =0;//int nn = n / k;//if(n % k != 0) nn++;
vector<int>dp(n,1);for(int begin =0; begin < k && begin + k < n; begin++){int cnt =0;
vector<int> minnums;for(int i = begin; i < n; i += k){
cnt++;auto pos =upper_bound(minnums.begin(), minnums.end(), a[i]);if(pos == minnums.end()){
minnums.push_back(a[i]);}else{*pos = a[i];}}//cout << " " << mmax << endl;
ans +=(cnt - minnums.size());}return ans;}};