连续字母长度
标题:连续字母长度 | 时间限制:1秒 | 内存限制:262144K | 语言限制:不限
给定一个字符串,只包含大写字母,求在包含同一字母的子串中,长度第 k 长的子串的长度,相同字母只取最长的那个子串。
import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String s = sc.nextLine().trim(); int k = Integer.parseInt(sc.nextLine().trim()); int index = 0; HashMap<Character, Integer> hs = new HashMap<>(); while (index < s.length()) { char c = s.charAt(index); int count = 1; while (index < s.length()-1 && s.charAt(index+1) == s.charAt(index)) { count++; index++; } if (!hs.containsKey(c)) { hs.put(c, count); } else { if (hs.get(c) < count) { hs.put(c, count); } } index++; } List<Character> lst = new ArrayList<>(hs.keySet()); lst.sort((c1, c2) -> { return hs.get(c2) - hs.get(c1); }); if (k > lst.size() || lst.size() == 0 || k <= 0) { System.out.println(-1); } else { System.out.println(hs.get(lst.get(k-1))); } } }
#include <iostream> #include <vector> #include <set> #include <string> #include <algorithm> using namespace std; int main() { string str; int k; cin >> str >> k; set<char> sc{ str.begin(), str.end() }; vector<int> vecLen; if (sc.size() < k || k <= 0) { cout << -1 << endl; return 0; } for (auto c:sc) { int count = 1; int maxCnt = count; for (int i=0;i<str.size();i++) { if (i+1 < str.size() && str[i] == str[i+1] && str[i] == c) { count++; if (count > maxCnt) { maxCnt = count; } } else { count = 1; } } vecLen.push_back(maxCnt); } sort(vecLen.begin(), vecLen.end()); reverse(vecLen.begin(), vecLen.end()); cout << vecLen[k-1] << endl; return 0; }