题解滑动窗口 | #在字符串中找出连续最长的数字串#
在字符串中找出连续最长的数字串
https://www.nowcoder.com/practice/2c81f88ecd5a4cc395b5308a99afbbec
import java.util.*; public class Main { public static void findLongestNumberSubstring(String s) { int left = 0, right = 0; int maxLen = 0; int start = 0; List<String> longestSubstrings = new ArrayList<>(); while (right < s.length()) { char c = s.charAt(right); right++; if (Character.isDigit(c)) { // 计算当前窗口的长度 int windowLen = right - left ; // 更新最大长度和起始索引 if (windowLen > maxLen) { maxLen = windowLen; start = left; longestSubstrings.clear(); longestSubstrings.add(s.substring(start, start + maxLen)); } else if (windowLen == maxLen) { longestSubstrings.add(s.substring(left, right)); } } else { // 非数字字符,收缩窗口 while (left < right && !Character.isDigit(s.charAt(left))) { left++; } // 重置窗口 left = right; } } StringBuilder sb = new StringBuilder(); // 输出最长数字子串以及它们的长度 for (String substring : longestSubstrings) { sb.append(substring); } System.out.print(sb+","+maxLen); System.out.println(); } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.hasNextLine()) { String input = scanner.nextLine(); findLongestNumberSubstring(input); } } }