import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // // 注意 hasNext 和 hasNextLine 的区别 // while (in.hasNextInt()) { // 注意 while 处理多个 case // int a = in.nextInt(); // int b = in.nextInt(); // System.out.println(a + b); // } //先把数据读取进来 int n = in.nextInt(); in.nextLine(); String s = in.nextLine(); //使用动态规划来解决,关键是定义好dp数组 //思路,定义dp[i]为以s[i]为结尾的子串的权值 //递推公式为:dp[i] = 1(单独一个字符作为子串)+dp[i-1](和前面的字符串连成一个字符串)(注意这种子串的数量为i) +i(如果s[i]和s[i-1]不同,则每个非单一字符子串的权值需要加一)/0(如果s[i]和s[i-1]相同) // long[] dp = new long[n]; dp[0] = 1; long ans = 1; for(int i=1;i<n;i++){ if(s.charAt(i)==s.charAt(i-1)){ dp[i] = 1+dp[i-1]; }else{ dp[i] = 1+dp[i-1]+i; } ans = ans+dp[i]; } System.out.println(ans); } }