两种策略:
1、 双指针移动右指针,更新左指针
2、 双指针移动左指针,更新右指针
返回两种策略的最小值即可。
/**
* 切割子串,子串头尾相同,并使子串数量最小
* 双指针
*
* @param s
* @return
*/
public static int solution(String s) {
char[] chars = s.toCharArray(); // 双指针
int i = 0, j = chars.length - 1;
int count = 0;
while (i<=j) {
if (chars[i] == chars[j]) {
// 截取i-j(闭区间)
count++;
i = j + 1;
j = chars.length - 1;
} else {
j--; // 右边指针移动
}
}
i = 0;
j = chars.length - 1; // ij重新赋值
int count2 = 0;
while (i<=j) {
if (chars[i] == chars[j]) {
// 截取i-j(闭区间)
count2++;
j = i-1;
i = 0;
} else {
i++;
}
}
return Math.min(count,count2);
}