/* 给你一个只包含字符 'a','b' 和 'c' 的字符串 s ,你可以执行下面这个操作(5 个步骤)任意次: 选择字符串 s 一个 非空 的前缀,这个前缀的所有字符都相同。 选择字符串 s 一个 非空 的后缀,这个后缀的所有字符都相同。 前缀和后缀在字符串中任意位置都不能有交集。 前缀和后缀包含的所有字符都要相同。 同时删除前缀和后缀。 请你返回对字符串 s 执行上面操作任意次以后(可能 0 次),能得到的 最短长度。 示例1: 输入:s = "cabaabac" 输出:0 解释:最优操作序列为: - 选择前缀 "c" 和后缀 "c" 并删除它们,得到 s = "abaaba" 。 - 选择前缀 "a" 和后缀 "a" 并删除它们,得到 s = "baab" 。 - 选择前缀 "b" 和后缀 "b" 并删除它们,得到 s = "aa" 。 - 选择前缀 "a" 和后缀 "a" 并删除它们,得到 s = "" 。 示例2: 输入:s = "aabccabba" 输出:3 解释:最优操作序列为: - 选择前缀 "aa" 和后缀 "a" 并删除它们,得到 s = "bccabb" 。 - 选择前缀 "b" 和后缀 "bb" 并删除它们,得到 s = "cca" 。 */ public class 删除字符串两端相同字符后的最短长度1750 { public static void main(String[] args) { String s = "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbacccabbabccaccbacaaccacacccaccbbbacaabbccbbcbcbcacacccccccbcbbabccaacaabacbbaccccbabbcbccccaccacaccbcbbcbcccabaaaabbbbbbbbbbbbbbb"; System.out.println(minimumLength(s)); } public static int minimumLength(String s) { int n = s.length(); int count = n; char[] cs = s.toCharArray(); a: for (int i = 0,j = n - 1; i < n -1 && j > 1 && i < j;) { if(cs[i] == cs[j]) { count = count -2; while (cs[i] == cs[i+1] && j > i+1) { count--; i++; } while (cs[j] == cs [j-1] && j > i+1){ count--; j--; } i++; j--; } else { break a; } } return count; }
}
这是我的思路,直接上代码!