乱序的字符串改成有序的字符串

算法一:

思路:每次都在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);
	}

}

算法二:

思路:将要排序的字符分次拆分放到多个list里面,然后将里面的list填满到字符串的长度,然后,循环取各个list里面的值,拿出来做拼接

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);
	}

}
posted @ 2017-06-07 11:15  Lost blog  阅读(668)  评论(0编辑  收藏  举报