题解滑动窗口 | #在字符串中找出连续最长的数字串#

在字符串中找出连续最长的数字串

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);
        }
    }
}


全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务