2020年旷世校招JAVA岗笔试第二题
生活随笔
收集整理的這篇文章主要介紹了
2020年旷世校招JAVA岗笔试第二题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
字符串長度
題目描述:
給定一個只包含小寫英文字母的字符串以及一個常數 k,求字符串最長的包含不超過 k 種字母的子串的長度。
例如,給定字符串 abaabccbbbdddddda,k = 3,這時 bccbbbdddddd 為滿足條件的最長子串,它只包含 b, c, d 三種字母,亦即此時的答案為 12。
輸入
第一行是k,第二行是字符串。字符串長度不超過110萬。
輸出
最長滿足條件的子串長度。
樣例輸入
3
bccbbbdddddd
樣例輸出
12
解題代碼:
import java.util.HashMap; import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int k = scanner.nextInt();String str = scanner.next();int res = f(str, k);System.out.println(res);}private static int f(String s, int k) {int result = 0;int left = 0;HashMap<Character, Integer> map = new HashMap<>();for (int right = 0; right < s.length(); right++) {map.put(s.charAt(right), right);while (map.size() > k) {char leftChar = s.charAt(left);if (map.get(leftChar) == left) {map.remove(leftChar);}left++;}int subResult = right - left + 1;result = Math.max(result, subResult);}return result;} }總結
以上是生活随笔為你收集整理的2020年旷世校招JAVA岗笔试第二题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2020年旷世校招JAVA岗笔试第一题
- 下一篇: 2020年奇安信校招JAVA岗笔试