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

算法一:

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

乱序的字符串改成有序的字符串的相关文章

php array_combine 把array的默认键改成指定的字符串

array(2) { [0] => array(6) { [0] => string(1) "1" [1] => string(10) "1470650276" [2] => string(12) "测试人员" [3] => string(9) "vpn出售" [4] => string(20) "出售10个包月VPN" [5] => string(6) "

sql 多条件查询 拼接字符串 改成 普通查询格式

set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go ALTER PROC [dbo].[usp_SRV_CheckServiceDemandOrder] @AInsNO NVARCHAR(50) =null,--必填 @ACompanyName NVARCHAR(50) = null,--必填 @ADepartmentName NVARCHAR(50) = null, @AName NVARCHAR(50) = null, --必填 @ApplicantI

字符串转换成类,字符串的值是事先声明类的

============问题描述============ 现在就是有一个字符串,例如temp,然后我想通过Intent intent = new Intent(Schedule.this,temp.class);转到temp页面,事先是已经声明好temp类的,怎么做啊 ============解决方案1============ try         String temp="package.classname";         Intent intent=new Intent();

NSString的形式--可变字符串--改方法Alter

前面我们讲解了可变形字符串的前三种方法, 现在我们来讲最后的一种改方法, 改方法和覆盖的方法有一些类似, 但又比覆盖的方法稍微不同, 它不是直接通过另外定义来进行覆盖的, 是可以通过位置和长度对原来的字符串进行修改覆盖. 下面涉及的方法有: replaceCharactersInRange: 它的意思就是通过NSMakeRange返回的位置和长度, 对原有的字符串进行修改. 下面是方法使用的简单例子: #import <Foundation/Foundation.h> int main(int

C# string转换成DateTime?(字符串转换成可空日期类型)

[转载] 作者:十有三 出处:http://shiyousan.com/post/ca4a6413-ecb4-4237-baf6-e88e616d18fc PS:此文主要讲述的是可空日期类型和字符串之间的转换,正常类型转换看这篇文章:字符串string类型转换成DateTime类型 最近项目中遇到以前一直困扰的问题,就是如何将string转换成DateTime?这种可空日期类型.以前总是通过编写一堆逻辑代码来进行转换,但是写这些代码感觉非常繁琐.后在网上浏览相关资料,使用NullableConv

Python 实现字符串转换成列表 实现str转换list

其中Python strip() 方法用于移除字符串头尾指定的字符 split()就是将一个字符串分裂成多个字符串组成的列表 >>> image ='1.jsp,2.jsp,3.jsp,4.jsp' >>> image_list = image.strip(',').split(',') >>> print image_list ['1.jsp', '2.jsp', '3.jsp', '4.jsp'] >>>

js字符串转换成数字,数字转换成字符串

js字符串转换成数字   将字符串转换成数字,得用到parseInt函数. parseInt(string) : 函数从string的开始解析,返回一个整数. 举例:parseInt('123') : 返回 123(int): parseInt('1234xxx') : 返回 1234(int): 如果解析不到数字,则将返回一个NaN的值,可以用isNaN()函数来检测: 举例 : var i = parseInt('abc'); if (isNaN(i)) { alert('NaN value

json字符串转换成json对象,json对象转换成字符串,值转换成字符串,字符串转成值

主要内容: 一.json相关概念 二.json字符串转换成json对象 (字符串-->JSON对象) 三.json对象转换成字符串(json对象-->字符串) 四.将值转换成字符串(值-->字符串) 五.字符串转成值(字符串-->值) 同步的交流学习社区:http://www.mwcxs.top/page/425.html 一.json相关概念 json,全称为javascript object notation,是一种轻量级的数据交互格式.采用完全独立于语言的文本格式,是一种理想

C#字符串和16进制字符串之间的转换

将字符串编码成 16进制 字符串表示: using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Net; namespace ConsoleApplication1{ class Program { static void Main(string[] args) { // 将字符串转换成16进制表示: // 先将字符串转换成 byte 数组: // (1).如果是