昨天一个大三的师姐和我探讨了一个有关字符串解析的问题,我觉得比较有意思,于是今天下午抽出

20分钟实现了一下,因为这个项目是一个学院的选课系统,为了导数据方便呢,他们采用了之前选课系统的数据库。

其实这类web项目一般难度不会很大,但是这个早期的数据库设计的比较个性,其中记录上课时间的数据,在数据库

里竟然使用的是一个20位01串。因为我们学校一个学期最长是20周的课时。1代表这周有课,0代表没有课,最后要

解析这个字符串,把字符串解析成一个通俗的话,例如:数据库里存的是"00101111110111101110",那么通过这个

程序要转换成“3周 5-10周 12-15周 17-19周”。其实还是比较有意思的。当然我举的这个例子是比较夸张,因为

学校不可能这样排课。这样排课学生不就崩溃了。这么散乱。一般也就是00000000111111111111这种的,或者

11111111111100000000,但是既然实现一个算法,当然就要具有通用性,要把所有情况的考虑到。于是便有了

这个项目需求,因为这个项目使用java来搞,所以俺就以java为例,写一下实现。之前师姐用的是一些面向过程语言里

经常使用的一些数据类型,例如int,char,char[],String[]。既然用java,俺就不用这些东东了,用的也不方便,

就使用Integer,String,List<Integer>,List<String>。不过都说StringBuilder比较快,但是我还是没有用这个。

因为不熟,考虑到线程同步,也许有人会用StringBuffer,不过还是需要一个synchronized()来搞一下才放心。

本着实现为先,步步优化的原则,我就用最顺手的String了。一个算法的好坏,衡量是多方面的,代码精简,代码易读,

命名规范,灵活多变。这些都是衡量标准。但是有时要有所取舍。废话侃了那么多,如果有兴趣的朋友可以,试着用您

最擅长的语言或脚本写一写,或者考验一下自己的速度,或者追求一下最高的执行效率,实现一下,我觉得还是挺有意

思的。晚辈在这里请教各位,交流一下实现方案。如果有用java实现更高效的算法,我就不用现在我写的这个了,斗胆

发到首页,渴望交流学习。

------------------------------------------------------------------------------

我的实现:(就当抛砖引玉了)

Read01
 1 package com.sy.string;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 
 6 public class Read01 {
 7 
 8     public static String convert(String input) {
 9 
10         List<Integer> intList = new ArrayList<Integer>();//没有课的周
11         List<String> strList = new ArrayList<String>();//输出的字符串片段
12         String result = new String();//返回值
13         String string = input;//接受字符串
14         String clips=null;//中间变量:字符串片段
15         Integer temp=1;//中间变量:有课的周
16         Integer temp2=0;//中间变量:循环次数
17         Integer temp3=0;///中间变量:上一次循环是第几周
18         
19         while (string.indexOf("0") != -1) {
20             intList.add(string.indexOf("0")+1+temp2);
21             string = string.substring(0, string.indexOf("0"))
22                     + string
23                             .substring(string.indexOf("0") + 1, string.length());
24             temp2++;
25         }
26         for (Integer num:intList) {
27             if(num-temp3==2){
28                 strList.add((num-1)+"周 ");
29             }
30             if (num==1) {
31                 clips="";
32                 strList.add(clips);
33             } else {
34                 clips=temp+"-"+(num-1)+"周 ";
35                 if(temp<(num-1))
36                 strList.add(clips);
37             }
38             temp=num+1;
39             temp3=num;
40         }
41         if(temp3<20){
42             if((temp3+1)==20){
43                 strList.add("20周");
44             }else{
45                 strList.add(temp3+1+"-20周");
46             }
47         }
48         for (String s:strList) {
49             result+=s;
50         }
51         return result;
52     }
53 
54     public static void main(String[] args) {
55         String str = new String("00101111110111101110");
56         System.out.println(convert(str));
57     }
58 }
59 

谢谢。

算法交流:分享我的一个算法,实现项目需求相关推荐

  1. c c 语言编程项目实例,实例分享cmake编译一个简单c++项目(demo)

    实例分享cmake编译一个简单c++项目(demo) 发布时间:2020-09-19 21:08:04 来源:脚本之家 阅读:63 作者:mdxy-dxy 下面通过一个小例子来说明cmake编译一个c ...

  2. noj数据结构稀疏矩阵的加法十字链表_一个算法毁了一款好游戏?算法和数据结构到底有多重要?...

    来源 | 异步 | 文末赠书 前段时间大火的国产游戏--<太吾绘卷>,由于创新的玩法和精良的制作一度广受好评,然而随着玩家游戏的深入和时长的积累,发现该游戏在玩的过程中游戏外的问题很多很多 ...

  3. 一个算法对于某个输入的循环次数是可以事先估计出来的_数据结构与算法:算法...

    算法(algorithm )是指令的集合,是为解决特定问题而规定的一系列操作.它是明确定义的可计算过程,以一个数据集合作为输入,并产生一个数据集合作为输出.一个算法通常来说具有以下五个特性: 输入:一 ...

  4. 大剑无锋之如何评判一个算法的优劣【面试推荐】

    ①时间复杂度:同样的输入规模(问题规模)花费多少时间 ②空间复杂度:同样的输入规模花费多少空间(主要是内存) 以上两点越小越好 ③稳定性(健壮性):不会因为输入的不同而导致不稳定的情况发生 ④算法思路 ...

  5. 一个算法毁了一款好游戏?算法和数据结构到底有多重要?

    来源 | 异步 前段时间大火的国产游戏--<太吾绘卷>,由于创新的玩法和精良的制作一度广受好评,然而随着玩家游戏的深入和时长的积累,发现该游戏在玩的过程中游戏外的问题很多很多. 首先是存档 ...

  6. 算法描述怎么写伪代码java_算法描述---伪代码

    算法描述 算法描述是指对设计出的算法,用一种方式进行详细的描述,以便与人交流.描述可以使用自然语言.伪代码,也可使用程序流程图,但描述的结果必须满足算法的五个特征. 使用自然语言描述算法显然很有吸引力 ...

  7. 【算法的时间复杂度和空间复杂度】-算法02

    算法的时间复杂度和空间复杂度 一个算法的好坏我们主要从"时间"和"空间" 两个维度来衡量 时间维度:是指执行当前算法所消耗的时间,我们通常用 "时间复 ...

  8. 分享一个开源的项目,数据结构和算法必知必会的50个代码实现

    数据结构和算法必知必会的50个代码实现 这个开源项目是有前Google工程师打造出来的,使用了c,go,java,python,php等很多中语言实现了一些数据结构和算法,对于喜欢算法的来说可谓是一个 ...

  9. 2020腾讯广告算法大赛分享(冠军)

    写在前面 2019年冠军选手成功卫冕! 代码地址:https://github.com/guoday/Tencent2020_Rank1st 从初赛冠军.复赛冠军,然后到最佳答辩,一路披荆斩棘,再次感 ...

  10. 【算法实践】搜狗信息流推荐算法交流.pdf(附下载链接)

    今天给大家带来搜狗科技王东先生所做的分享<搜狗信息流推荐算法交流.pdf>,本分享共包含如下四大部分: 1.推荐系统架构: 2.文章NLP: 3.召回算法: 4.个性化排序. 本PPT共2 ...

最新文章

  1. webpack打包路径更改_扫盲: Webpack 从扫盲到手撸(上)
  2. SQL-16 统计出当前各个title类型对应的员工当前薪水对应的平均工资。结果给出title以及平均工资avg。...
  3. 我的总结SVN的使用
  4. Ceph分布式存储高性能设计
  5. 如何给字体添加底色indesign_“美哉汉字”2020字体设计专家工作坊预告+报名
  6. php 注册树,php设计模式-注册树模式
  7. 对团队建设与管理的几点看法
  8. Datalore:用于机器学习可视化的新Web方案!
  9. 什么是区块链预言机(BlockChain Oracle)
  10. sql 简单加密函数
  11. 第十八节:教你如何使用ES6的Promise对象
  12. pytesseract识别数字
  13. 深圳能耗管理系统_综合能源管理平台
  14. CH9102国产USB转高速串口芯片兼容替代CP2102
  15. 黑龙江省大学计算机学校排名2015,2015黑龙江省最佳大学排行榜
  16. jzoj. 3518. 【NOIP2013模拟11.6A组】进化序列(evolve)
  17. 1000内不能被7整除的数
  18. 微博android升级7.000,华为 Android 7.0 升级计划曝光:G9 青春版 /Nova 也有份
  19. 一文完全理解模型ks指标含义并画出ks曲线(包含代码和详细解释)
  20. 西门子PLC1200学习之比较指令

热门文章

  1. 六石风格文档范例:做测试结果表格
  2. error: implicit declaration of function ‘RAND_egd’ [-Werror=implicit-function-declaration]
  3. LINUX下载编译sqlite-jdbc(支持mips64el/loongarch64的jar包下载)
  4. 编程基本功:以输入法为例,谈谈测试案例的设计
  5. 编译OpenJDK8:configure: Could not compile and link with freetype. This might be a 32/64-bit mismatch.
  6. JDK8-u271/u272的jre和jdk/jre的文件有差异
  7. C盘空间丢失30G,怎么也找不到
  8. 看到一个RISC-V指令集的评论
  9. 僵化封闭是世界的新主流?
  10. 网络故障一例:网络不能用,ping出错