1 最长最短单词

头指针记录开头,尾指针记录结尾。单词的长度为j-i。最后找出长度最长和最短单词就行了。

#include<bits/stdc++.h>
using namespace std;
int main()
{
	string s;
	int maxx=0,minn=100,dz=0,xz=0;
	getline(cin,s);
	int len=s.size();
	for(int i=0;i<=len;i++)
	{
		int j=i;
		while(s[j]<='z'&&s[j]>='a'||s[j]>='A'&&s[j]<='Z') 
		{
			j++;
		}
		if(j-i<minn)
		{
			minn=j-i;
			xz=i;
		}
		if(j-i>maxx)
		{
			maxx=j-i;
			dz=i;
		}
		i=j;
	}
	for(int i=dz;i<=dz+maxx-1;i++)
	{
		cout<<s[i];
	}
	cout<<endl;
	for(int i=xz;i<=xz+minn-1;i++)
	{
		cout<<s[i];
	}
return 0;
}

2 数组求和

因为a和b都是不降序的所以,开始时i为1,j为n。那么,如果a[i]+b[j]大于k那么j--,如果小于k那么i++。

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int a[N],b[N];
int main()
{
	int n,m,k;
	cin>>n>>m>>k;
	for(int i=0;i<n;i++)
	{
		cin>>a[i];
	}
	for(int i=0;i<m;i++)
	{
		cin>>b[i]; 
	}
	for(int i=0;i<n;i++)
	{
		int j=m-1;
		while(b[j]+a[i]>k)
		{
			j--;
		}
		if(a[i]+b[j]==k)
		{
			cout<<i<<' '<<j;
			break;
		}
	}
return 0;
}