标签:子串 right 瑕疵 element ++ int 元音 input left
思路:
采用双指针方法遍历字符串;
1)初始时左右边界指针都指向位置0;
2)边界判断:左元音右缺陷(right++)、左缺陷右元音(left++)、左右都缺陷(left++、right++)、左右都元音(计算缺陷度);
3)计算元音字串的长度:
1. 先判断当前缺陷度是否满足要求,小于则right++,大于则left++;
2. 缺陷度符合要求后,才计算当前字串长度,并和历史最大值比较,更新最大值。
#include <iostream> #include <string> using namespace std; int GetLongestFlawedVowelSubstrLen(const size_t flaw, const string& input) { int element[128] = {0}; element['a'] = 1; element['A'] = 1; element['e'] = 1; element['E'] = 1; element['i'] = 1; element['I'] = 1; element['o'] = 1; element['O'] = 1; element['u'] = 1; element['U'] = 1; int noeleCnt = 0; int length = input.length(); int left = 0; int right = 0; int maxLen = 0; int currentLen = 0; while (right < length) { if (!element[input[right]]) { noeleCnt++; right++; continue; } while (!element[input[left]]) { noeleCnt--; left++; } if (noeleCnt == flaw) { currentLen = right - left + 1; maxLen = currentLen > maxLen ? currentLen : maxLen; right++; } else if (noeleCnt < flaw) { right++; } else if (noeleCnt > flaw) { while (element[input[left]] == 1) { left++; } noeleCnt--; left++; } } return maxLen; } int main() { size_t flaw; cin >> flaw; string input; cin >> input; cout << GetLongestFlawedVowelSubstrLen(flaw, input) << endl; return 0; }
标签:子串,right,瑕疵,element,++,int,元音,input,left 来源: https://www.cnblogs.com/gcter/p/15851895.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。