一个长字符串中含多个连续和不连续的空格,求不含空格的最长字符串长度。

如:uyuy 11 ikkhkhkhk kkj,结果:9

最暴力方案1(没分,只能用于验证其他方案结果正确性):

 public static int test1(String str) {String[] arr = StringUtils.split(str);//默认以空格拆分int len = 0 ;for (int i = 0; i < arr.length; i++) {if(arr[i].length()>len) {len = arr[i].length();}}return len;}

方案2:使用indexOf

 public static int test2(String str) {int i = 0;while (true) {int k = str.indexOf(" ");if (k < 0) {break;}if (i < str.substring(0, k).length()) {i = str.substring(0, k).length();}str = str.substring(k + 1);}return i;}

方案3:使用char数组(我所知道的最优方案)

 public static int test3(String str) {char[] cs = str.toCharArray();int startIndex = 0;int count = 0;for (int i = 0; i < cs.length; ) {if(cs[i] != 32 ) {i++;continue;}count = Math.max(count, i-startIndex);i++;startIndex = i;}return count;}

方案4:

 public static int test4(String str) {int count = 0;int len = str.length();int leftPoint = 0;int rightPoint = 0;while(leftPoint<len && rightPoint<len) {if(leftPoint == rightPoint) {rightPoint++;continue;}String subStr = str.substring(leftPoint, rightPoint);if(!subStr.contains(" ")) {count = Math.max(count, rightPoint++-leftPoint);}else {leftPoint++;}}return count;}

各自运行1000次进行测试:

 public static void main(String[] args) {long startTime = System.currentTimeMillis(); //获取开始时间String str = "a1 123# abc a bc defkdfkhfkgfghkfghfkjgkffg ghi j k lmn op qfdfds fdfdf dsfsdfdsfdf dfdfdfdfdfdhfkgfghkfghfkjgkffg ghi j k lmn op qfdfds fdfdf dsfsdfdsfdf dfdfdfdfhfkgfghkfghfkjgkffg ghi j k lmn op qfdfds fdfdf dsfsdfdsfdf dfdfdfdfhfkgfghkfghfkjgkffg ghi j k lmn op qfdfds fdfdf dsfsdfdsfdf dfdfdfdffdfddefdefkdfkhfkgfghkfghfkjgkffg ghi j k lmn op qfdfds fdfdf dsfsdfdsfdf dfdfdfdfdfdfdfddefdefkdfkhfkgfghkfghfkjgkffg ghi j k lmn op qfdfds fdfdf dsfsdfdsfdf dfdfdfdfdfdfdfddefkdfkhfkgfghkfghfkjgkffg ghi j k lmn op qfdfds fdfdf dsfsdfdsfdf dfdfdfdfdfdfdfddefkdfkhfkgfghkfghfkjgkffg ghi j k lmn op qfdfds fdfdf dsfsdfdsfdf";
//      String str = "a 12 2";System.out.println("字符总长度:"+str.length());//String[] arr = str.split(" ");int count1 = 0;for (int i = 0; i < 1000; i++) {count1 = test1(str);}System.out.println("1最大长度:"+count1);long endTime = System.currentTimeMillis(); //获取结束时间System.out.println("1程序运行时间:" + (endTime - startTime) + "ms");///long startTime2 = System.currentTimeMillis(); //获取开始时间int count2 = 0;for (int i = 0; i < 1000; i++) {count2 = test2(str);}System.out.println("2最大长度:"+count2);long endTime2 = System.currentTimeMillis(); //获取结束时间System.out.println("2程序运行时间:" + (endTime2 - startTime2) + "ms");/long startTime3 = System.currentTimeMillis(); //获取开始时间int count3 = 0;for (int i = 0; i < 1000; i++) {count3 = test3(str);}System.out.println("3最大长度:"+count3);long endTime3 = System.currentTimeMillis(); //获取结束时间System.out.println("3程序运行时间:" + (endTime3 - startTime3) + "ms");/long startTime4 = System.currentTimeMillis(); //获取开始时间int count4 = 0;for (int i = 0; i < 1000; i++) {count4 = test4(str);}System.out.println("4最大长度:"+count4);long endTime4 = System.currentTimeMillis(); //获取结束时间System.out.println("4程序运行时间:" + (endTime4 - startTime4) + "ms");}

输出结果:

字符总长度:621
1最大长度:44
1程序运行时间:563ms
2最大长度:44
2程序运行时间:49ms
3最大长度:44
3程序运行时间:27ms
4最大长度:44
4程序运行时间:182ms

可见方案3还是不错的,不过除了方案1其他的都有bug,就是如果最后一个长字符串是最大长度,那么他们就出错了,解决办法就是在每个方法第一行增加:

 str+=" ";

算法:一个长字符串中含多个连续和不连续的空格,求不含空格的最长字符串长度相关推荐

  1. 66.假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:删除字符串中所有的*号。在编写函数时,不得使用C语言提供的字符串函数。

    66.假定输入的字符串中只包含字母和号.请编写函数fun,它的功能是:删除字符串中所有的号.在编写函数时,不得使用C语言提供的字符串函数. 例如,若字符串中的内容为****A*BC*DEFG***** ...

  2. c字符串中包含双引号_零基础学Python:一文看懂数字和字符串

    来源:大数据DT 本文约2000字,建议阅读6分钟 数据类型是构成编程语言语法的基础.[ 导读 ]数据类型是构成编程语言语法的基础.不同的编程语言有不同的数据类型,但都具有常用的几种数据类型.Pyth ...

  3. c语言去除字符串中字母,C语言经典例题100例——C语言练习实例32解答(在字符串中删除指定字母或字符串)...

    题目:删除一个字符串中的指定字母,如:字符串 "aca",删除其中的 a 字母. 程序分析:无. 程序源代码: // 百宝箱工作室 官方网址 http://www.baibaox. ...

  4. python取出字符串中的偶数_从给定字符串中删除偶数个连续的重复字符

    我试图解决这样一个问题:我将字符串作为输入,然后删除偶数计数的重复字符.在 在输入:AZXXZYYYDDDYZZZ在 输出:azzz 你能帮我做这个吗.在 我的尝试在删除重复字符方面效果不错,但我一直 ...

  5. c语言判断字符串中是否包含非数字,【新手】【求思路】如何判断用户输入的字符串中是否含有非数字?...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include int main() { int a=0; float b,c; printf("考拉兹在 1930 年提出 ...

  6. 提取字符串中的多个连续数字

    import restr1 = '2366年1月9日'pattern = re.compile(r'\d+')res = re.findall(pattern, str1) for i in res: ...

  7. python fun函数的功能是_python编程。假定输入字符串中只包含字母和*号,请编写函数fun,它的功能是将字符串中间的*号...

    展开全部 # -*- coding: UTF-8 -*- import re __author__ = 'lpe234' raw_str = '****' def filter_star(_raw_s ...

  8. python使用textwrap包在已经生成的长字符串中嵌入回车符实战

    python使用textwrap包在已经生成的长字符串中嵌入回车符实战 目录 python使用textwrap包在已经生成的长字符串中嵌入回车符实战 # textwrap包在长字符串中嵌入回车符 #实 ...

  9. 算法--06谷歌面试:字符串中第一个只出现一次的字符(Java实现)

    Q题目 这道题是2006 年 google 的一道笔试题,如下: 在一个字符串中找到第一个只出现一次的字符.如输入 abaccdeff,则输出 b. A解法 这道题,说难也不难,关键是思路. 有些人思 ...

最新文章

  1. ADS1.2安装要点
  2. premiere pr 波纹编辑 滚动编辑 比率拉伸 工具使用
  3. LINUX ORACLE 启动与关闭
  4. centos7 开机延迟几分钟后自启动
  5. Mysql日志-RedoLog、UndoLog和BinLog的关系捋顺
  6. Java开发人员的十大戒律
  7. 【c++ primer读书笔记】【第2章】变量和基本类型
  8. 解决ubuntu18.04中python兼容以及pip兼容问题
  9. mysql主从复制原理详解_深入研究MySQL(三)、主从复制原理及演示
  10. 我是如何考上武汉大学在职研究生的
  11. 学科竞赛管理系统服务器错误,大学生学科竞赛管理系统的设计与实现
  12. html5 observer api,转: HTML5新特性之Mutation Observer
  13. 中国移动国际mCloud如何助力企业乘风破浪?
  14. 中国科学院计算机研究所上级单位,陈援非(中国科学院计算技术研究所高工)_百度百科...
  15. 计算机二级考试失误有提示吗,2016年计算机二级考试应该避免的失误
  16. 研究区分onbeforeunload事件是刷新还是关闭
  17. 并发编程 定时线程池ScheduledThreadPoolExecutor学习总结
  18. 安卓app软件开发教程!免费Android高级工程师学习资源,值得收藏!
  19. 360误删mysql_回收站里的文件被清空如何还原?360安全卫士快速恢复误删文件方法...
  20. 硬盘的扇面、磁道、扇区

热门文章

  1. 树莓派linux led字符设备驱动(原子操作)
  2. 【实例】用PHP制作一个简单的日历
  3. 五大主流浏览器及其内核简要介绍
  4. 32位系统无法运行64位系统安装文件
  5. 如何对Windows 2000中出现的“Stop 0x0000007B”错误信息进行故障诊断 1
  6. windows输入法输入英文字母中间有空格
  7. 开源集锦(五)开源框架和快速开发工具类
  8. 必得沾福气卡两张,可沾花花卡、敬业福。(扫福攻略、扫福技巧)
  9. 苹果手机显示无法与服务器建立安全连接,苹果手机那个safari浏览器无法与访问器建立安全链接是什么意思...
  10. 【综述】植物防御假说——Out of the quagmire of plant defense hypotheses