问题描述:
给你一个只包含字符 ‘a’,‘b’ 和 ‘c’ 的字符串 s ,你可以执行下面这个操作(5 个步骤)任意次:
- 选择字符串 s 一个 非空 的前缀,这个前缀的所有字符都相同。
- 选择字符串 s 一个 非空 的后缀,这个后缀的所有字符都相同。
- 前缀和后缀在字符串中任意位置都不能有交集。
- 前缀和后缀包含的所有字符都要相同。
- 同时删除前缀和后缀。
请你返回对字符串 s 执行上面操作任意次以后(可能 0 次),能得到的 最短长度 。
样例如下:
代码如下(双指针解决):
public class MinimumLength {
//给你一个只包含字符 'a','b' 和 'c' 的字符串 s ,你可以执行下面这个操作(5 个步骤)任意次:
//选择字符串 s 一个 非空 的前缀,这个前缀的所有字符都相同。
//选择字符串 s 一个 非空 的后缀,这个后缀的所有字符都相同。
//前缀和后缀在字符串中任意位置都不能有交集。
//前缀和后缀包含的所有字符都要相同。
//同时删除前缀和后缀。
//请你返回对字符串 s 执行上面操作任意次以后(可能 0 次),能得到的 最短长度 。
public static int minimumLength(String s) {
int st = 0;//双指针移动
int end = s.length()-1;
while (st<end){
if (s.charAt(st) == s.charAt(end)){
char temp = s.charAt(st);
while ( st <= end && s.charAt(st) == temp){
st++;
}
while (st <= end && s.charAt(end) == temp){
end--;
}
}else break;
}
return st<=end?(end-st+1):0;
}
public static void main(String[] args) {
System.out.println(minimumLength("ca"));
System.out.println(minimumLength("cabaabac"));
System.out.println(minimumLength("aabccabba"));
System.out.println(minimumLength("bbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbccbcbcbccbbabbb"));
}
}
结果如下: