1.有字符串如:"fsdfsffgggeesgssgseg33333333333111esfsffseffffff"要求输入连续最多的字符和其个数。如:结果应该输入33333333333 11(如果有相同的输入字母排列在前的)
2.有字符串"abc,33,11,hjuttt,dfg,acdses,9",要求自己写排序算法,结果应输出:
9
11
33
abc
acdses
dfg
hjuttt,本人感觉稍微有点难度,值得做一下
2.有字符串"abc,33,11,hjuttt,dfg,acdses,9",要求自己写排序算法,结果应输出:
9
11
33
abc
acdses
dfg
hjuttt,本人感觉稍微有点难度,值得做一下
import java.util.List;
import java.util.ArrayList;
public class Sort {
public static String[] sort(String s){
String[] ss=s.split(",");
int temp;
String sTemp;
for(int i=0;i<ss.length;i++){
temp=i;
for(int j=i+1;j<ss.length;j++){
if(ss[temp].compareTo(ss[j])>0)
temp=j;
}
if(temp!=i){
sTemp=ss[i];
ss[i]=ss[temp];
ss[temp]=sTemp;
}
}
return ss;
}
public static void main(String args[]){
String s="abc,33,11,hjuttt,dfg,acdses,9";
String[] ss;
ss=sort(s);
for(int i=0;i<ss.length;i++)
System.out.println(ss[i]);
}
}
上面这段代码也许可以帮你。
遍历 "fsdfsffgggeesgssgseg33333333333111esfsffseffffff"
然后 累加
第2题
9
11
33
abc
acdses
dfg
hjuttt
首先找规律 首先他是根据数字大小排序,然后根据字母开头字母排序
这个不难 先排数字, 然后就是字母了, 你就依次比较字母 将字母转换成 char
然后比Ascii 比
public class Test {
public static void main(String[] args) {
String s = "fsdfsffgggeesgssgseg33333333333111esfsffseffffff";
char[] ch = s.toCharArray();
char c=ch[0];
int n=1;
for(int i=0,num=1; i<ch.length-1; i++) {
if(ch[i]==ch[i+1]) {
num++;
}else {
if(num>n){n=num;c =ch[i];};
num=1;
}
}
System.out.println(c+":"+n);
}
}
import java.util.*;
public class Test {
public static void main(String[] args) {
String[] strs = {"abc","33","11","hjuttt","dfg","acdses","9"};
Arrays.sort(strs,new MyComparator());
for(String s:strs) {
System.out.println(s);
}
}
}
class MyComparator implements Comparator {
public int compare(Object o1, Object o2) {
String str1 = (String)o1;
String str2 = (String)o2;
boolean b1 = str1.matches("\\d+");
boolean b2 = str2.matches("\\d+");
if(b1==true&&b2==true) {
return Integer.parseInt(str1)-Integer.parseInt(str2);
}
if(b1==true&&b2==false) {
return -1;
}
if(b1==false&&b2==true) {
return 1;
}
if(b1==false&&b2==false) {
return str1.compareTo(str2);
}
return 0;
}
}
再扫描过程中,用count计数,记录连续字符串的个数,再和max比较,最后输出str.substring(begin, begin+max)及max即可。第2题:首先分split(",")解字符串到字符串数组(这个算法就不用自己写了吧)
然后排序,按照字符串的首个字符的asc码大小,若第一个相等,比较第二个,一次类推。(可以直接用compareTo或equals实现,可以看看API)
最后输出即可
最后使用 Collections.sort(List),基本上就OK 了,不用自己写算法了。
2.有字符串"abc,33,11,hjuttt,dfg,acdses,9",要求自己写排序算法,结果应输出:
9
11
33
abc
acdses
dfg
hjuttt,本人感觉稍微有点难度,值得做一下下来试到做下,先关注学习
遍历一次那串字符便可开辟一个 长度为127的数组
每次取一个字符,然后累加到以该字符ASCII码为索引号的数组元素中最后对那长度为127的数组进行处理便可
import java.util.Comparator;public class T1 {
public static void main(String[] args) {
String s1 = "fsdfsffgggeesgssgseg33333333333111esfsffseffffff";
String s2 = "abc,33,11,hjuttt,dfg,acdses,9";
char[] ch= s1.toCharArray();
new T1().charComp(ch);
String[] sArr = s2.split(",");
System.out.println("排序前:");
for(String s:sArr){
System.out.print(" " + s);
}
System.out.println();
System.out.println("排序后:");
Arrays.sort(sArr, new MyComparetor());
for(String s:sArr){
System.out.print(" " + s);
}
}
public void charComp(char[] ch){
int num = 1;
int maxNum = 1; //记录连续输入最大个数
char c = ch[0];
int pos = 0; //记录连续输入最大个数的字符的起始位置
int posStart = 0;
for(int i=1;i<ch.length;i++){
if(ch[i]==c){
num++;
}else{
c = ch[i];
if(maxNum < num){
pos = posStart;
maxNum = num;
}
posStart = i;
num = 1;
}
}
if(maxNum < num){
pos = posStart;
maxNum = num;
}
System.out.println("连续输入字符是:");
for(int i=0;i<maxNum;i++){
System.out.print(ch[i+pos]);
}
System.out.println(" 共" + maxNum + "个");
}
}class MyComparetor implements Comparator<String>{
public int compare(String o1, String o2) {
boolean b1 = o1.matches("\\d+");
boolean b2 = o2.matches("\\d+");
if(b1==true&&b2==true){
return Integer.parseInt(o1) - Integer.parseInt(o2);
}else if(b1==true&&b2==false){
return -1;
}else if(b1==false&&b2==true){
return 1;
}else if(b1==false&&b2==false){
return o1.compareTo(o2);
}
return 0;
}
}
* @param args
*/
public static void main(String[] args) {
String s1 = "fsdfsffgggeesgssgseg33333333333111esfsffseffffff";
String s2 = "abc,33,11,hjuttt,dfg,acdses,9";
getSameNums(s1); //第1题
selectSort(s2); //第2题
}
/**
* 求出字符串中出现重复数的字符串和出现重复的次数
* @param s
*/
private static void getSameNums(String s) {
int k = 0; //始终指向连续数出现的最多的个数的起始位置
int num1 = 1; //记录了连续出现的数最多的个数
int num2 = 1; //记录了当前重复数的个数
boolean isOver = false; //程序的出口
for(int i=0; i<s.length(); i++) {
if(isOver)
break;
for(int j=i; j<s.length()-1; j++) {
if(s.charAt(j) == s.charAt(j+1)) { //遍历字符串
num2++;
if(num1 < num2) { //判断是否小,如果小则num1重新赋值
num1 = num2;
k = i; //k值重新定向
}
}
else {
num2 = 1;
i = j;
break;
}
if(j == s.length()-2) //发现j值遍历到尾部了则提示程序退出
isOver = true;
}
}
System.out.println(s.substring(k, k+num1) + " " + num1);
}
/**
* 对字符串中的数进行排序,所有的排序都是自己写的,没有用到String的compareTo()方法
* @param s
*/
private static void selectSort(String s) {
String temp[] = s.split(","); //分隔成字符串数组
int k = 0; //始终指向数组中值最小的那个数
char c1 = 0; //拿到前一个字符串的字符
char c2 = 0; //拿到后一个字符串的字符
int n = 0; //遍历字符串时用到的指针
for(int i=0; i<temp.length-1; i++) {
k = i;
for(int j=k+1; j<temp.length; j++) {
while(n < temp[k].length() && n < temp[j].length()) { //同时遍历2个字符串数组
c1 = temp[k].charAt(n); //分别哪到指定位置上的字符
c2 = temp[j].charAt(n);
if((c1 >= '0' && c1 <= '9') &&
(c2 >= '0' && c2 <= '9')) { //判断2个字符是否是字符串,如果是则代表他们是2个数,直接转成数来比较大小
if(Integer.parseInt(temp[k]) > Integer.parseInt(temp[j])) {
k = j; //k值重新定向
break;
}
}
if(c1 > c2) { //如果比较的2个数要么是1个数1个字符串,要么2个都是字符串,则直接比较他们指定位置的字符上的值
k = j; //如果c2小则k重新定向
break;
} else if(c1 < c2) //如果小于,则无需比较他们下一个字符了
break;
else
n++; //如果他们第一个字符相同,则比较下一个位置上的字符
}
} //循环完一此则交换一下,类似于选择排序
String str = temp[i];
temp[i] = temp[k];
temp[k] = str;
}
//将数组打印出来
for(int i=0; i<temp.length; i++) {
System.out.println(temp[i]);
}
}}