题目集
1. 两数之和 II
原题链接:167. 两数之和 II - 输入有序数组 - 力扣(LeetCode)
笔记:
在数组中求两个数字的和等于某个值,使用双指针,从头和尾分别开始查,类似二分;
代码:
class Solution {
public:
vector<int> twoSum(vector<int>& numbers, int target) {
int left = 0, right = numbers.size()-1;
while(left<right){
int sum = numbers[left]+numbers[right];
if(sum == target){
return {left+1, right+1};
}
else if(sum<target){
left++;
}
else{
right--;
}
}
return {-1, -1};
}
};
2. 最长回文子串
笔记:
由于回文串长度可能是偶数,也可能是奇数;
--> 从中间向两边搜索;
且因此,如果回文串的长度为奇数,则它有一个中心字符;如果回文串的长度为偶数,则可以认为它有两个中心字符;
--> 搜两次;
代码:
class Solution {
public:
string longestPalindrome(string s) {
string res = "";
for(int i=0; i<s.length(); i++){
string s1 = palindrome(s, i, i);
string s2 = palindrome(s, i, i+1);
res = res.length()>s1.length()?res:s1;
res = res.length()>s2.length()?res:s2;
}
return res;
}
string palindrome(string s, int l, int r){
while(l>=0 && r<s.length() && s[l] == s[r]){
l--;
r++;
}
return s.substr(l+1, r-l-1);
}
};