• 字符串移动问题


    【需求说明】:编码完成下面的处理函数。函数将字符串中的字符"*"移动字符串的前部,前面的非"*"字符后移,但不能改变非"*"字符的先后顺序,函数返回串中字符"*"的数量。如原始串为:ab**cd**e*12,处理后为*****abcde12,且函数返回值为5(要求使用尽量少的时间和辅助空间)。

    【需求分析】:本题目的要求是算法时间上最优,关键还要求存储空间上最优,这下那些通过再来几个字符串作为辅助的算法就不能用了,但是我们前面学过很多排序算法!用我们前面所学的排序算法去实现即可!直接进入代码部分:

     1 package sr.string;
     2 
     3 import java.util.Scanner;
     4 
     5 /**
     6  * @author lzj
     7  * @create 2017年10月24日 上午2:22:34
     8  * @describe 字符串移动
     9  * 编码完成下面的处理函数。函数将字符串中的字符"*"
    10  * 移动字符串的前部,前面的非"*"字符后移,但不能改
    11  * 变非"*"字符的先后顺序,函数返回串中字符"*"的数
    12  * 量。如原始串为:ab**cd**e*12,处理后
    13  * 为*****abcde12,且函数返回值为5
    14  * (要求使用尽量少的时间和辅助空间)。
    15  */
    16 public class StringMove {
    17 
    18     public int stringMove(String str) {
    19         System.out.println("处理前的字符串为:"+str);
    20         char beforStr[] =str.toCharArray();
    21         int i,j=beforStr.length-1;
    22         for(i=j;j>=0;j--) {
    23             if(beforStr[i]!='*') {
    24                 i--;
    25             }else if(beforStr[j] !='*'){
    26                 //如果下标为i的字符为"*"
    27                 beforStr[i]=beforStr[j];
    28                 beforStr[j]='*';
    29                 i--;
    30             }
    31         }
    32         System.out.println("处理后的字符串为:");
    33         for(char afterStr : beforStr) {
    34             System.out.print(afterStr);
    35         }
    36         return i+1;
    37     }
    38     /**
    39      * at 2017年10月24日 上午2:22:34 by lzj
    40      * @Parameters1 String[] args
    41      * @Returns void
    42      */
    43     public static void main(String[] args) {
    44         StringMove m=new StringMove();
    45         Scanner input=new Scanner(System.in);
    46         System.out.println("请输入字符串:");
    47         String str=input.next();
    48         int sum=m.stringMove(str);
    49         System.out.println("其中*个数为:"+sum);
    50     }
    51 }

    运行结果截图:

    如有任何疑问可联系邮箱: 给我发邮件、或直接联系QQ:1584875179 || 点返回首页

  • 相关阅读:
    采用多种算法,模拟摇奖:从1-36中随机抽出8个不重复的数字
    有一百匹马,驮一百担货,大马驮3担,中马驮2担,两只小马驮1担,问有大,中,小马各几匹?
    5文钱可以买一只公鸡,3文钱可以买一只母鸡,1文钱可以买3只雏鸡。现在用100文钱买100只鸡,那么各有公鸡、母鸡、雏鸡多少只?请编写程序实现。
    集合相关题目0927
    输入输出作业
    IO流,File类的测试........课堂加总结
    使用泛型............课堂
    Map 映射
    Set
    List相关知识点.......课堂加整理
  • 原文地址:https://www.cnblogs.com/aeon/p/7721693.html
Copyright © 2020-2023  润新知