leetcode_424. Longest Repeating Character Replacement 求替换k个字符后连续相同字符子串的长度,滑动窗口的应用
2016-12-08 17:35
489 查看
题目:
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:
Example 2:
题意:
给定全部由大写字母组成的字符串和数字k,可将字符串中的字母用其他字母替换k次,求替换后,字符串中含有相同字母的最长子串长度
代码:
public class Solution {
public int characterReplacement(String s, int k) {
int n = s.length();
if ( n == 0 ) {
return 0;
}
int map[];
map = new int[26]; #将字母映射到map中,key:字母-‘A’ value:字母在字符串中出现的次数
map[s.charAt(0)-'A']++; #统计字符串s中的第一个字母出现次数
int most = map[s.charAt(0)-'A']; #most:记录字符串s中出现次数最多的字母,初始化为s[0]出现的次数
int res = 1; #替换后最长子串长度
int left = 0; #定义窗口,left:窗口左侧
for( int right = 1 ; right < n; right++) { #right:窗口右侧
map[s.charAt(right)-'A']++; #统计右移的窗口对应的字母的出现次数,放在map中
most = Math.max(most, map[s.charAt(right)-'A']); #修改most值,判断原有窗口出现次数最多的字母,与新进窗口的字母出现次数比较,most取大的那个
if( right - left + 1 > most+k ) { #如果窗口大于出现次数最多的字母出现次数与k的和,则需要修改窗口
map[s.charAt(left)-'A']--; #移除窗口的字母出现次数减一
left++; #窗口左侧右移
} else {
res = Math.max(res, right-left+1); #保持窗口>当前最大值res的情况下,我们才看是否满足others
<= k,满足才更新
}
}
return res;
}
}
笔记:
java:
1、统计字符串长度:int n = s.length();
2、定义数组: int map[]; 或 int [] map;
3、数组初始化:map = new int[26];
4、获取字符串对应下标的char 值:s.charAt(0)
5、计算最大值函数:Math.max()
6、输出函数: System.out.print("aaaaaa");
代码算法参考:http://www.cnblogs.com/reboot329/p/5968393.html
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 = 2 Output: 4 Explanation: Replace the two 'A's with two 'B's or vice versa.
Example 2:
Input: s = "AABABBA", k = 1 Output: 4 Explanation: Replace the one 'A' in the middle with 'B' and form "AABBBBA". The substring "BBBB" has the longest repeating letters, which is 4.
题意:
给定全部由大写字母组成的字符串和数字k,可将字符串中的字母用其他字母替换k次,求替换后,字符串中含有相同字母的最长子串长度
代码:
public class Solution {
public int characterReplacement(String s, int k) {
int n = s.length();
if ( n == 0 ) {
return 0;
}
int map[];
map = new int[26]; #将字母映射到map中,key:字母-‘A’ value:字母在字符串中出现的次数
map[s.charAt(0)-'A']++; #统计字符串s中的第一个字母出现次数
int most = map[s.charAt(0)-'A']; #most:记录字符串s中出现次数最多的字母,初始化为s[0]出现的次数
int res = 1; #替换后最长子串长度
int left = 0; #定义窗口,left:窗口左侧
for( int right = 1 ; right < n; right++) { #right:窗口右侧
map[s.charAt(right)-'A']++; #统计右移的窗口对应的字母的出现次数,放在map中
most = Math.max(most, map[s.charAt(right)-'A']); #修改most值,判断原有窗口出现次数最多的字母,与新进窗口的字母出现次数比较,most取大的那个
if( right - left + 1 > most+k ) { #如果窗口大于出现次数最多的字母出现次数与k的和,则需要修改窗口
map[s.charAt(left)-'A']--; #移除窗口的字母出现次数减一
left++; #窗口左侧右移
} else {
res = Math.max(res, right-left+1); #保持窗口>当前最大值res的情况下,我们才看是否满足others
<= k,满足才更新
}
}
return res;
}
}
笔记:
java:
1、统计字符串长度:int n = s.length();
2、定义数组: int map[]; 或 int [] map;
3、数组初始化:map = new int[26];
4、获取字符串对应下标的char 值:s.charAt(0)
5、计算最大值函数:Math.max()
6、输出函数: System.out.print("aaaaaa");
代码算法参考:http://www.cnblogs.com/reboot329/p/5968393.html
相关文章推荐
- 【codeforces 676C】 【尺取法】【从一个ab序列中最多改变k个字符找到最长的连续a子串或者b子串长度】
- tyvj 1170 0/1字符串问题 字符串中仅包含0和1两个字符;②字符串的长度为n;③字符串中不含有三个连续的相同子串 搜索
- 从一个ab序列中最多改变k个字符找到最长的连续a子串或者b子串长度.【尺取法】
- [面试题] 查找最长不含相同字符的连续子串
- 如果字符串的一个子串(其长度大于 1)的各个字符均相同,则称之为等值子串。试设计一算法,求出串S中的最大等值子串 函数返回最大等值子串的长度,如果没有则返回1。 例如: 若S= “abc123abc1
- 【Leetcode】寻找数串中连续最大整数和且最大长度的子串
- 统计字符串中连续出现某些字符的最大子串长度
- leetcode 696. Count Binary Substrings 连续出现相同次数0或1子串数量 + 很棒的做法
- 求字符串中由连续的相同字符组成的最长子串(如果有两个及两个以上的最长子串,则输出第二个)
- LeetCode 3. Longest Substring Without Repeating Characters--不包含重复字符的最长子串长度
- leetcode_438. Find All Anagrams in a String 在母串中找所有字符在子串中出现的连续子串
- C++实现去掉字符串中连续相同K个0子串
- LeetCode: 3_Longest Substring Without Repeating Characters | 求没有重复字符的最长子串的长度 | Medium
- 每天一道LeetCode-----将字符串的连续相同的字符合并成一个字符后加个数
- 【leetcode】第3题:求最长不重复(字符不重复)的子串的长度
- 【Leetcode】寻找数串中连续最大整数和且最大长度的子串
- C++_USACO_求一个字符串的连续相同字符的最大长度
- [leetcode]获取字符串中字符不重复的最长子串的长度
- 字符串中不重复连续字符子串的长度最大值
- 输入一行子串,找出其中出现的相同且长度最长的字符串,输出它及其首字符的位置