字符串中找出连续最长的字符串
题目描述
读入一个字符串str,输出字符串str中的连续最长的数字串
输入描述:个测试输入包含1个测试用例,一个字符串str,长度不超过255。
输出描述:在一行内输出str中里连续最长的数字串。
如输入:abcd12345ed125ss123456789,输出:123456789
题目思路
这道题我们可以使用三个string对象,str用来接收题目要求输入的字符串,cur用来做保存在遍历中的连续字符串,而ret用来保存最后的最长的字符串,用来输出。
我们首先遍历str对象,当我们遍历时,把有连续出现的数字字符串保存至cur对象中,当数字字符串结束时,我们来比较cur和ret的大小,将大的那一个存入ret中,并用clear()清空cur,当cur没有ret大时,我们只需清空cur。(注:当下标等于str.size()时也需要判断,否则会直接跳出循环)
代码
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str;
string cur;
cin>>str;
string ret;
for(int i=0;i<=str.size();i++)
{
if(str[i]>='0' && str[i]<='9')
{
cur+=str[i];
continue;
}
if(cur.size()>ret.size())
{
ret=cur;
cur.clear();
}
else
{
cur.clear();
}
}
cout<<ret<<endl;
return 0;
}
数组中出现超过一半的数字
题目描述
给一个长度为 n 的数组,数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。
示例1
输入
[1,2,3,2,2,2,5,4,2]输出
2
题目思路
我们创建一个数组v,用v来对要求数组里的值进行映射,将每个值放入数组v的对应位置,记录每个元素的个数,再来判断哪一个出现次数大于一半。
代码
class Solution {
public:
int MoreThanHalfNum_Solution(vector<int> numbers) {
int sign=numbers.size()/2;
vector<int> v;
v.resize(5000);
for(auto &a : numbers)
{
v[a]++;
}
int ret=0;
for(int i=0;i<v.size();i++)
{
if(v[i] > sign)
{
ret=i;
break;
}
}
return ret;
}
};