今天的面试官贼友好,整个面试过程非常轻松,爱了爱了
1、自我介绍
2、问项目,简历上的项目挨个问了一遍
3、最长回文子串
采用中心扩散法
class Solution {
public:
int getLongestPalindrome(string A, int n) {
if(n <= 1) return n;
int left = 0, right = 0, longest = 1;
for(int i = 0; i < n; i++) { //以每个字符为中心左右扩散
left = right = i; //长度为奇数时
while(left >= 0 && right < n) { //确保不越界
if(A[left] == A[right]) { //判断左右字符是否相等
longest = max(longest, right - left + 1); //相等时更新最大长度
left--;right++; //左右各扩散一位
}
else break; //若不相等则退出循环
}
left = i;
right = i + 1; //长度为偶数时
while(left >= 0 && right < n) { //原理同上
if(A[left] == A[right]) {
longest = max(longest, right - left + 1);
left--;right++;
}
else break;
}
}
return longest; //返回最大值
}
};
4、三数之和等于零
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
sort(nums.begin(),nums.end());
vector<vector<int>> res;
if(nums.size()<3)
return res;
for(int k=0;k<nums.size()-2;++k){
if(nums[k]>0)
break;
else if(k>0&&nums[k]==nums[k-1])
continue;
else{
int target=-nums[k];
int i=k+1,j=nums.size()-1;
while(i<j){
int sum=nums[i]+nums[j];
if(sum<target){
while(i<j&&nums[i]==nums[++i]);
}else if(sum>target){
while(i<j&&nums[j]==nums[--j]);
}else{
res.push_back({nums[k],nums[i],nums[j]});
while(i<j&&nums[i]==nums[++i]);
while(i<j&&nums[j]==nums[--j]);
}
}
}
}
return res;
}
};