贵阳做网站seocfa一级看多久两分钟
2.开赛主题曲【算法赛】 - 蓝桥云课
这道题和3. 无重复字符的最长子串 - 力扣(LeetCode)类似,因为题目中规定只有小写字母,所以定义统计数组时只需要定义26个字母即可,然后每次遍历的字符减去‘a’即为他的下标
import java.util.*;
// 1:无需package
// 2: 类名必须Main, 不可修改public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();String s = sc.next();String ss = "lanqiobe";TreeSet<String> ts = new TreeSet<String>();int[] count = new int[26];int corse = 0;int maxcorse = 0;int l = 0;for (int r = 0; r < n; r++) {count[s.charAt(r) - 'a']++;corse = corse + s.charAt(r) - 'a' + 1;while (count[s.charAt(r) - 'a'] >= 2) {count[s.charAt(l) - 'a']--;corse -= s.charAt(l) - 'a' + 1;l++;}String sub = s.substring(l, r + 1);int nowcount = corse + precount(sub);if(nowcount>maxcorse) {ts.clear();ts.add(sub);maxcorse = nowcount;}else if(nowcount == maxcorse) {ts.add(sub);}}System.out.println(ts.first());}public static int precount(String sub) {if (sub.contains("lanqiobe")) {return 80;} else if (sub.contains("lanqiob"))return 70;else if (sub.contains("lanqio"))return 60;else if (sub.contains("lanqi"))return 50;else if (sub.contains("lanq"))return 40;else if (sub.contains("lan"))return 30;else if (sub.contains("la"))return 20;else if (sub.contains("l"))return 10;elsereturn 0;}
}