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

算法一:

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

转载于:https://www.cnblogs.com/JAYIT/p/6956060.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值