美团面试题
原题地址
题目描述
小美喜欢字母E,讨厌字母F。在小美生日时,小团送了小美一个仅包含字母E和F的字符串,小美想从中选出一个包含字母E数量与字母F数量之差最大的子串。
*子串:从字符串前面连续删去若干个字符,从后面连续删去若干个字符剩下的字符串(也可以一个都不删),例如abcab是fabcab的子串,而不是abcad的子串。我们将空串看作所有字符串的子串。
输入描述:
第一行一个正整数n表示字符串的长度。
第二行长度为n,且仅包含大写字母’E’,’F’的字符串(不含引号)
输出描述:
输出一个整数,表示最大的差值
示例
输入
5
EFEEF
输出
2
此题本质是求子数组的最大累加和
import java.util.*;
public class Main {
public static void main (String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
sc.nextLine();
char[] arr = sc.nextLine().trim().toCharArray();
int sum = 0;
int max = 0;
for (int i = 0; i < arr.length; i++) {
if (arr[i] == 'E') {
sum++;
max = Math.max(max, sum);
} else {
sum--;
if (sum < 0) sum =0;
}
}
System.out.println(max);
}
}
}