华为机试-在字符串中找出连续最长的数字串(较难)
在字符串中找出连续最长的数字串
http://www.nowcoder.com/practice/2c81f88ecd5a4cc395b5308a99afbbec
题目描述
输入一个字符串,返回其最长的数字子串,以及其长度。若有多个最长的数字子串,则将它们全部输出(按原字符串的相对位置)
本题含有多组样例输入。
输入
abcd12345ed125ss123058789
a8a72a6a5yy98y65ee1r2
输出
123058789,9
729865,2
用了双指针
#include<iostream> #include<vector> #include<string> using namespace std; bool isdigit(char a){ if(a>='0'&&a<='9') return true; else return false; } int main(){ string s; while(cin>>s){ int left=0,right=0,ans=0; vector<string> temp; while(left<s.length()&&right<s.length()){ while(left<s.length()&&!isdigit(s[left])) left++;//找到连续数字的左边界 right=left; while(right<s.length()&&isdigit(s[right])) right++;//找到连续数字的右边界的下一位 if(right-left==ans) temp.push_back(s.substr(left,right-left)); if(right-left>ans){ ans=right-left; temp.clear(); temp.push_back(s.substr(left,right-left)); } left=right; } for(auto i:temp) cout<<i; cout<<','<<ans<<endl; temp.clear(); }
}