华为机考--查找字符串中连续最长的相同字符(Java)

原题目没有拷贝,只能用自己的语言描述一下了。

  • 题目描述:输入一个字符串,字符串中会有连续的相同字符,找到这些连续相同的字符,输出其中的连续长度最大的子串。如果有长度相同的子串,则按照ASCII输出最靠前的。
  • 输入:一个字符串
  • 输出:最长的连续子串
  • 例子输入:aaabbbbbccccccccczzzzzzzzz
  • 例子输出:ccccccccc

个人解析:这个题目的要点有两个,一是找相同的连续子串,二是排序且输出Ascii靠前的
代码如下,已提交且AC:

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        String s = scan.nextLine();

        List<String> list = new ArrayList<String>();
        
        // 查找相同的子串
        int start = 0;
        for (int i = 0; i < s.length() - 1; i++) {
            if (s.charAt(i) == s.charAt(i+1) ) {
                // 末尾时,直接加上
                if (i+2 == s.length()) {
                    list.add(s.substring(start,s.length()));
                }
                continue;
            } else {
                list.add(s.substring(start,i+1));
                start = i+1;
                continue;
            }
        }

        // 自定义排序,长度长的在前面,长度相同时按字母顺序
        Collections.sort(list, new Comparator<String>() {
            public int compare(String o1, String o2) {
                if (o1.length() == o2.length()) {
                    char c1 = o1.charAt(0);
                    char c2 = o2.charAt(0);
                    return c1 - c2;
                } else {
                    return o2.length() - o1.length();
                }
            }
        });
        System.out.println(list.get(0));
    }
}

你可能感兴趣的:(练习题)