算法一:
思路:每次都在list找字符首次出现的位置,拿出来然后将当前位置置为空,然后循环拼接后的字符串
package test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class CEO {
public static void ceo(String str){
String[] arr = str.split("");
List<String> l = Arrays.asList(arr);
List<String> tmp = new ArrayList<String>();
while(true) {
int C = l.indexOf("C");
int E = l.indexOf("E");
int O = l.indexOf("O");
if(C == -1 && E== -1 && O== -1) {
tmp.addAll(l);
break;
}else {
if(C!=-1){
tmp.add("C");
l.set(C, "");
}
if(E!=-1){
tmp.add("E");
l.set(E, "");
}
if(O!=-1){
tmp.add("O");
l.set(O, "");
}
}
}
StringBuffer sb = new StringBuffer();
for(String t : tmp) {
if(!"".equals(t)) {
sb.append(t);
}
}
System.out.println(sb.toString());
System.out.println(sb.toString().length());
}
public static void main(String[] args) {
String str="CEOOEECEEOCEECOOOEEEE";
ceo(str);
}
}
算法二:
package test;
import java.util.ArrayList;
import java.util.List;
public class CEO1 {
public static void ceo(String str){
List<String> list1=new ArrayList<String>();
List<String> list2=new ArrayList<String>();
List<String> list3=new ArrayList<String>();
String m1="C";
String m2="E";
String m3="O";
for(int i=0;i<str.length();i++){
if(m1.equals(str.charAt(i)+"")){
list1.add("C");
}else if(m2.equals(str.charAt(i)+"")){
list2.add("E");
}else if(m3.equals(str.charAt(i)+"")){
list3.add("O");
}
}
StringBuilder m=new StringBuilder("");
for(String s1:list1){
m.append(s1);
}
for(String s2:list2){
m.append(s2);
}
for(String s3:list3){
m.append(s3);
}
System.out.println("排序前:"+m);
for(int i=0;i<str.length();i++){
if(i>=list1.size()){
list1.add("");
}
if(i>=list2.size()){
list2.add("");
}
if(i>=list3.size()){
list3.add("");
}
}
System.out.print("排序后:");
for(int i=0;i<str.length();i++){
System.out.print(list1.get(i)+list2.get(i)+list3.get(i));
}
}
public static void main(String[] args) {
String str="CCEEEOOO";
String str1="CEOOEECEEOCEECOOOEEEE";
ceo(str1);
}
}
将要排序的字符分次拆分放到多个list里面,然后将里面的list填满到字符串的长度,然后,循环取各个list里面的值,拿出来做拼接
时间: 2024-10-07 17:35:37