字符串,每次从首部或尾部取一个字符,拼接成目标字符串,使得字典序最小。
用例
原字符串:abcadbcb,转化后字符串:abbcacbd
原字符串:abcbdacb,转化后字符串:abbcacbd
原字符串:aaabdaaa,转化后字符串:aaaaaabd
代码
public String procString(String s){
if(s==null || s.length() <= 1) return s;
//思路:双指针
int left = 0;
int right = s.length()-1;
StringBuilder res = new StringBuilder();
while(left<=right){
if(s.charAt(left)<s.charAt(right)){
res.append(String.valueOf(s.charAt(left)));//去头
left++;
}
else if(s.charAt(left)>s.charAt(right)){
res.append(String.valueOf(s.charAt(right)));//去尾
right--;
}
else{//判断删头还是删尾
int i = left;
int j = right;
//从两端往中心找到左右不相等的二个字符
while(i<j && s.charAt(i) == s.charAt(j)){
i++;
j--;
}
if(i==j) {
res.append(String.valueOf(s.charAt(left)));//去头
left++;
continue;
}
if(s.charAt(i)<s.charAt(j)){
res.append(String.valueOf(s.charAt(left)));//去头
left++;
}
else{
res.append(String.valueOf(s.charAt(right)));//去尾
right--;
}
}
}
return res.toString();
}