编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
class Solution {
public String longestCommonPrefix(String[] strs) {
int n=strs.length;
if(n==0) return "";
//假设第一个字符串为最长公共前缀
String s=strs[0];
for(int i=1;i<n;i++){
// 如果第i个字符串的前缀不是s,去掉s的最后一个字符
while(strs[i].indexOf(s)!=0){
s=s.substring(0,s.length()-1);
if(s=="") return s;
}
}
return s;
}
}
最大子序和
class Solution {
public:
int maxSubArray(vector<int>& nums) {
long long maxx=nums[0],sum=nums[0];
for(int i=1;i<nums.size();i++){
if(nums[i]>sum+nums[i]) sum=nums[i];
else sum=sum+nums[i];
maxx=max(maxx,sum);
}
return maxx;
}
};
无重复字符的最长子串
class Solution {
public:
int lengthOfLongestSubstring(string s) {
unordered_set<char> occ;
int n=s.length();
int maxx=0,rk=-1;
for(int i=0;i<n;i++){
if(i){
occ.erase(s[i-1]);
}
while(rk+1<n&&!occ.count(s[rk+1])){
occ.insert(s[rk+1]);
rk++;
}
maxx=max(rk-i+1,maxx);
}
return maxx;
}
};
三数之和为0
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
int n=nums.size();
vector<vector<int> > res;
if(n<3) return res;
sort(nums.begin(),nums.end());
for(int i=0;i<n-2;i++){
if(nums[i]>0) break;
if(i>0&&nums[i]==nums[i-1]) continue;
int l=i+1,r=n-1;
while(l<r){
int t=nums[i]+nums[l]+nums[r];
if(t==0){
res.push_back(vector<int>{nums[i],nums[l],nums[r]});
while(r>l&&nums[r]==nums[r-1]) r--;
while(l<r&&nums[l]==nums[l+1]) l++;
r--;l++;
}
if(t<0) l++;
if(t>0) r--;
}
}
return res;
}
};
盛水最多的容器
class Solution {
public:
int maxArea(vector<int>& height) {
int size=height.size();
int left=0,right=size-1;
int ans=0;
while(left<right){
ans=max(ans,min(height[left],height[right])*(right-left));
if(height[left]>height[right]) right--;
else left++;
}
return ans;
}
};