Longest Repeating Character Replacement

来源:互联网 发布:淘宝运营推广区别 编辑:程序博客网 时间:2024/06/05 10:59

Given a string that consists of only uppercase English letters, you can replace any letter in the string with another letter at most k times. Find the length of a longest substring containing all repeating letters you can get after performing the above operations.

Note:
Both the string's length and k will not exceed 104.

Example 1:

Input:s = "ABAB", k = 2Output:4Explanation:Replace the two 'A's with two 'B's or vice versa.

Example 2:

Input:s = "AABABBA", k = 1Output:4Explanation:Replace the one 'A' in the middle with 'B' and form "AABBBBA".The substring "BBBB" has the longest repeating letters, which is 4.

本题,我采用的是利用两个指针进行遍历;从左至右依次进行寻找最长字符串,但是遇到一个特殊的情况需要注意的是:

input:ABBB

这个时候,我们需要多判断一步,判定我们的K是否用完,如果没用完需要加上,当然最后的长度不应该大于整个字符串的长度:

代码如下:

// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include<iostream>#include<string>using namespace std;class Solution {public:int characterReplacement(string s, int k) {char *ps = &s[0], *pe = &s[0];int num = 0,dis=0,len=0;while (*pe != '\0'){if (*ps == *pe){++num;++pe;if (*pe == '\0'&&dis<k){num = num + (k - dis);if (num>s.length())num = s.length();}}else{dis++;if (dis <= k){++num;++pe;if (*pe == '\0'&&dis<k){num =num+ (k - dis);if (num>s.length())num = s.length();}}else{if (num > len){len = num;}dis = 0;num = 0;++ps;pe = ps;}}}if (num > len){len = num;}return len;}};int _tmain(int argc, _TCHAR* argv[]){Solution s;string str = "ABBB";int num;num=s.characterReplacement(str, 2);cout << num<<endl;system("pause");return 0;}


0 0
原创粉丝点击