1.有字符串如:"fsdfsffgggeesgssgseg33333333333111esfsffseffffff"要求输入连续最多的字符和其个数。如:结果应该输入33333333333 11(如果有相同的输入字母排列在前的)
2.有字符串"abc,33,11,hjuttt,dfg,acdses,9",要求自己写排序算法,结果应输出:
9
11
33
abc
acdses
dfg
hjuttt,本人感觉稍微有点难度,值得做一下

解决方案 »

  1.   

    package study;
    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]);
    }
    }
    上面这段代码也许可以帮你。
      

  2.   

    第1提楼主我给你讲个思路好了不给代码你 免得对你没有好处
    遍历 "fsdfsffgggeesgssgseg33333333333111esfsffseffffff" 
    然后 累加
    第2题

    11 
    33 
    abc 
    acdses 
    dfg 
    hjuttt
    首先找规律  首先他是根据数字大小排序,然后根据字母开头字母排序
    这个不难 先排数字, 然后就是字母了, 你就依次比较字母 将字母转换成 char
    然后比Ascii 比
      

  3.   


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

      

  4.   


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

  5.   

    第1题:只需扫描一遍字符串即可。可以设置max,begin两个int型变量,用于记录最长字串的长度及起始位置
           再扫描过程中,用count计数,记录连续字符串的个数,再和max比较,最后输出str.substring(begin, begin+max)及max即可。第2题:首先分split(",")解字符串到字符串数组(这个算法就不用自己写了吧)
           然后排序,按照字符串的首个字符的asc码大小,若第一个相等,比较第二个,一次类推。(可以直接用compareTo或equals实现,可以看看API)
           最后输出即可
      

  6.   

    第2题:首先分split(",")解字符串到字符串数组, 然后放到 List 中,
    最后使用 Collections.sort(List),基本上就OK 了,不用自己写算法了。
      

  7.   

    1.有字符串如:"fsdfsffgggeesgssgseg33333333333111esfsffseffffff"要求输入连续最多的字符和其个数。如:结果应该输入33333333333 11(如果有相同的输入字母排列在前的) 
    2.有字符串"abc,33,11,hjuttt,dfg,acdses,9",要求自己写排序算法,结果应输出: 

    11 
    33 
    abc 
    acdses 
    dfg 
    hjuttt,本人感觉稍微有点难度,值得做一下下来试到做下,先关注学习
      

  8.   

    我对第一题有的小算法不知可好
    遍历一次那串字符便可开辟一个 长度为127的数组
    每次取一个字符,然后累加到以该字符ASCII码为索引号的数组元素中最后对那长度为127的数组进行处理便可
      

  9.   

    for循环遍历,记录每组相同字符的个数(记录当前相同个数count,如果下一组的个数大于上一组,则覆盖count。最后输出count),
      

  10.   

    第二题中将其转换成String数组后,11和9直接compareTo比较11是排在9前面的
      

  11.   

    第二题个人认为6楼兄弟的方法很好很强大,算是学到了import java.util.Arrays;
    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;
    }
    }
      

  12.   

    public class Test1 { /**
     * @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]);
    }

    }}