一个很容易的难题。

问题描述

如何高效的找出一个字符串中最长重复次数的字符串,并计算其重复次数。例如:字符串“abcfghibcklabcdlkmabcdefg”,将返回“abcd”和2

解决方案

解决方案二:
[b]追加一个问题:给你一个随机生成a到b的函数randomA()和randomB(),用它去实现一个随机生成c到d的函数randomCD()
解决方案三:
第一题:Strings="字符串";for(intr=0;r<s.length()-1;r++){for(inti=r+1;i<=s.length();i++){if(i<=s.length()){Stringdd=s.substring(r,i);if(s.indexOf(dd)!=-1){Stringtmps=s.replaceAll(dd,"");intlen=(s.length()-tmps.length())/dd.length();if(len>1){//只有大于一次的才记录System.out.println(dd+"重复出现的次数:"+len);}}}}

解决方案四:
如果是求最大,可以将得到的重复字符串,存在一个数组里面,然后进行排序,求出最大值
解决方案五:
第二题没看懂
解决方案六:
你给的那个例子结果应该是abc,3吧
解决方案七:
引用5楼sca4441479的回复:

你给的那个例子结果应该是abc,3吧

abcd是最长重复的
解决方案八:
字符串的问题如何解决,取决于你有多大数据量,如果说数据量很小,这个问题那就太简单了,split一下,然后搞个Map保存并且每次加1就行了。如果数据量很大的话,这个问题就比较复杂了。
解决方案九:
引用2楼shijing266的回复:

第一题:Strings="字符串";for(intr=0;r<s.length()-1;r++){for(inti=r+1;i<=s.length();i++){if(i<=s.length()){Stringdd=s.substring(r,i);if(s.indexOf(dd)!=-1){Stringtmps=s.replaceAll(dd,"");intlen=(s.length()-tmps.length())/dd.length();if(len>1){//只有大于一次的才记录System.out.println(dd+"重复出现的次数:"+len);}}}}

好强
解决方案十:
引用2楼shijing266的回复:

第一题:Strings="字符串";for(intr=0;r<s.length()-1;r++){for(inti=r+1;i<=s.length();i++){if(i<=s.length()){Stringdd=s.substring(r,i);if(s.indexOf(dd)!=-1){Stringtmps=s.replaceAll(dd,"");intlen=(s.length()-tmps.length())/dd.length();if(len>1){//只有大于一次的才记录System.out.println(dd+"重复出现的次数:"+len);}}}}

第一个if是不是很多余啊?
解决方案十一:
引用9楼u012742909的回复:

Quote: 引用2楼shijing266的回复:
第一题:Strings="字符串";for(intr=0;r<s.length()-1;r++){for(inti=r+1;i<=s.length();i++){if(i<=s.length()){Stringdd=s.substring(r,i);if(s.indexOf(dd)!=-1){Stringtmps=s.replaceAll(dd,"");intlen=(s.length()-tmps.length())/dd.length();if(len>1){//只有大于一次的才记录System.out.println(dd+"重复出现的次数:"+len);}}}}

第一个if是不是很多余啊?

呵呵~随你理解~
解决方案十二:
publicclassTest{publicstaticvoidmain(String[]args){while(true){BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));System.out.println("请输入你要查找的字符串,如要结束请键入END:");Strings="";try{s=br.readLine();if(s.equals("END")||s.equals("end")){System.out.println("退出程序");System.exit(0);}for(intr=0;r<s.length()-1;r++){for(inti=r+1;i<=s.length();i++){if(i<=s.length()){Stringdd=s.substring(r,i);if(s.indexOf(dd)!=-1){Stringtmps=s.replaceAll(dd,"");intlen=(s.length()-tmps.length())/dd.length();if(len>1){//只有大于一次的才记录System.out.println(dd+"重复出现的次数:"+len);}}}}}}catch(IOExceptione){System.out.println("程序出错:"+e.getMessage());}}}}
解决方案十三:
引用1楼u012842647的回复:

[b]追加一个问题:给你一个随机生成a到b的函数randomA()和randomB(),用它去实现一个随机生成c到d的函数randomCD()

楼主是“已知一个随机生成a到b的函数randomAB(),用它去实现一个随机生成c到d的函数randomCD()”这个意思嘛?
解决方案十四:
引用7楼rumlee的回复:

字符串的问题如何解决,取决于你有多大数据量,如果说数据量很小,这个问题那就太简单了,split一下,然后搞个Map保存并且每次加1就行了。如果数据量很大的话,这个问题就比较复杂了。

可是这个不是根据空格切割的呀,应该怎样切割?
解决方案十五:
第一个题,有好多种情况,再次不能按空格切割,因为空格也是字符。我给出一个算法,目前涵盖了我能想到的所有情况。最不好想的一种是这个输入:abcdefabcmodef上代码:importjava.util.ArrayList;/***<p>Title:TestString</p>*<p>Description:输入字符串,最长重复次数的字符串,并计算其重复次数。空格也当字符处理</p>*@params*@authorZhengBing(2014-8-21下午4:12:17)*/publicclassTestString{publicstaticvoidmain(String[]args){//Strings="abcabdabcmpoer";//结果为:重复字符串:abc,重复次数:2//Strings="abcdefabcmodef";//结果为:重复字符串:abc,重复次数:2//重复字符串:def,重复次数:2Strings="abcdyyyyopqrstabcdiiiiabcdoooopqrst";//结果为:重复字符串:opqrst,重复次数:2ArrayList<String>subStrings=newArrayList<String>();intcount=0;for(inti=0;i<s.length();i++){for(intj=i+1;j<=s.length();j++){Stringsub=s.substring(i,j);intc=(s.length()-s.replaceAll(sub,"").length())/sub.length();if(subStrings.size()==0){if(c>1){subStrings.add(sub);count=c;}}else{if(sub.length()>subStrings.get(0).length()&&c>1){subStrings.clear();subStrings.add(sub);count=c;}elseif(sub.length()==subStrings.get(0).length()&&c==count){if(!subStrings.contains(sub))subStrings.add(sub);}}if(j-i-1>=s.length()/2)break;}}if(subStrings.size()==0){System.out.println("未找到重复字符串。");}else{for(inti=0;i<subStrings.size();i++){System.out.println("重复字符串:"+subStrings.get(i)+",重复次数:"+count);}}}}

解决方案:
引用2楼shijing266的回复:

第一题:Strings="字符串";for(intr=0;r<s.length()-1;r++){for(inti=r+1;i<=s.length();i++){if(i<=s.length()){Stringdd=s.substring(r,i);if(s.indexOf(dd)!=-1){Stringtmps=s.replaceAll(dd,"");intlen=(s.length()-tmps.length())/dd.length();if(len>1){//只有大于一次的才记录System.out.println(dd+"重复出现的次数:"+len);}}}}

二楼,你写的,输入abcdefabcmodef会是什么结果。
解决方案:
第二题,麻烦你把题说明白,我没看懂
解决方案:
引用15楼innight的回复:

Quote: 引用2楼shijing266的回复:
第一题:Strings="字符串";for(intr=0;r<s.length()-1;r++){for(inti=r+1;i<=s.length();i++){if(i<=s.length()){Stringdd=s.substring(r,i);if(s.indexOf(dd)!=-1){Stringtmps=s.replaceAll(dd,"");intlen=(s.length()-tmps.length())/dd.length();if(len>1){//只有大于一次的才记录System.out.println(dd+"重复出现的次数:"+len);}}}}

二楼,你写的,输入abcdefabcmodef会是什么结果。

abc重复出现的次数:2b重复出现的次数:2bc重复出现的次数:2c重复出现的次数:2d重复出现的次数:2de重复出现的次数:2def重复出现的次数:2e重复出现的次数:2ef重复出现的次数:2
解决方案:
引用17楼shijing266的回复:

Quote: 引用15楼innight的回复:
Quote: 引用2楼shijing266的回复:
第一题:Strings="字符串";for(intr=0;r<s.length()-1;r++){for(inti=r+1;i<=s.length();i++){if(i<=s.length()){Stringdd=s.substring(r,i);if(s.indexOf(dd)!=-1){Stringtmps=s.replaceAll(dd,"");intlen=(s.length()-tmps.length())/dd.length();if(len>1){//只有大于一次的才记录System.out.println(dd+"重复出现的次数:"+len);}}}}

二楼,你写的,输入abcdefabcmodef会是什么结果。

abc重复出现的次数:2b重复出现的次数:2bc重复出现的次数:2c重复出现的次数:2d重复出现的次数:2de重复出现的次数:2def重复出现的次数:2e重复出现的次数:2ef重复出现的次数:2

你这程序只能算是完成了一半内层循环没必要循环到i<=s.length(),一半就可以了,比如:if(i-r-1>=s.length()/2)break;

解决方案:
凑个热闹publicstaticvoidmain(String[]args){finalStringchaine="abcfghibcklabcdlkmabcdefg";String[]arr=chaine.split("");Arrays.sort(arr,newComparator<String>(){@Overridepublicintcompare(Stringo1,Stringo2){if(o1.length()!=o2.length()){returno1.length()<o2.length()?-1:1;}returno1.compareTo(o2);}});StringtheStr=arr[arr.length-1];IntegertheSum=1;for(inti=arr.length-2;i>=0;i--){StringcurrentStr=arr[i];IntegercurrentSum=1;for(intj=i+1;j<arr.length;j++){if(arr[j].contains(currentStr))currentSum++;}if(currentSum>1){theStr=currentStr;theSum=currentSum;if(i==0||arr[i-1].length()<currentStr.length())break;}}System.out.println(theStr+":"+theSum);}

解决方案:
引用18楼innight的回复:

Quote: 引用17楼shijing266的回复:
Quote: 引用15楼innight的回复:
Quote: 引用2楼shijing266的回复:
第一题:Strings="字符串";for(intr=0;r<s.length()-1;r++){for(inti=r+1;i<=s.length();i++){if(i<=s.length()){Stringdd=s.substring(r,i);if(s.indexOf(dd)!=-1){Stringtmps=s.replaceAll(dd,"");intlen=(s.length()-tmps.length())/dd.length();if(len>1){//只有大于一次的才记录System.out.println(dd+"重复出现的次数:"+len);}}}}

二楼,你写的,输入abcdefabcmodef会是什么结果。

abc重复出现的次数:2b重复出现的次数:2bc重复出现的次数:2c重复出现的次数:2d重复出现的次数:2de重复出现的次数:2def重复出现的次数:2e重复出现的次数:2ef重复出现的次数:2

你这程序只能算是完成了一半内层循环没必要循环到i<=s.length(),一半就可以了,比如:if(i-r-1>=s.length()/2)break;

恩,我之前没考虑那么多...因为只要是字符就循环出来了

时间: 2024-11-16 07:01:32

一个很容易的难题。的相关文章

向各位RF老手提问,一个很大的难题

问题描述 条形码问题:E服务器如何实现用扫描器扫描完一条记录保存到textbox后自动跳转到下textbox框.是在RF远程机上面实行 解决方案 解决方案二:没遇到过!!!应该可以实现的!!!解决方案三:找下通信相关方面的资料,这个就跟超市的收银系统差不多吧解决方案四:采用c/s模式,通过socket编程解决方案五:大哥们,告诉我主要实现步骤哈解决方案六:需要写监听程序来实现解决方案七:我是不会呀~~才疏学浅呐,不行解决方案八:扫描枪只是简单的扫描条码,然后模拟回车事件,所以你只要在每个Text

算法-一个很难的程序难题,关于m选n

问题描述 一个很难的程序难题,关于m选n 求一个m选n的算法,比如4选2,输出12 13 14 23 24 34 m选n的m和n要自由输入,怎么实现 解决方案 http://bbs.csdn.net/topics/390550326 解决方案二: 这个就是数学里面的组合问题,百度下实现算法呗. 解决方案三: m选n的算法 解决方案四: 经典算法题,你去搜索下能找到 解决方案五: 如何编写从M中选N的组合数程序 解决方案六: void print_subset(int cur,int m ,int

stream.js 一个很小、完全独立的Javascript类库_javascript技巧

<script src='stream-min.js'></script> 下载 stream.js 2Kb minified streams是什么? Streams 是一个操作简单的数据结构,很像数组或链接表,但附加了一些非凡的能力. 它们有什么特别之处? 跟数组不一样,streams是一个有魔法的数据结构.它可以装载无穷多的元素.是的,你没听错.他的这种魔力来自于具有延后(lazily)执行的能力.这简单的术语完全能表明它们可以加载无穷多的元素. 入门 如果你愿意花10分钟的时

新浪CEO兼总裁曹国伟:我是一个很感性的人

曹国伟参加2009CCTV 中国经济年度人物颁奖典礼新浪CEO兼总裁曹国伟 在大学同学眼中,曹国伟是一个天生的商人.在同事眼中,他是一个超级美食家.大学老师说他为人低调,善于变通:投资家说他是一个很严谨的生意人,完全按照商业规则出牌.但曹国伟自己却说:"我其实是一个很感性的人."虽然并购分众未能成功,但他却完成了中国互联网企业首例MBO.去年9月,以他为首的管理层用约1.8亿美元购入新浪约9.42%的股份,实现了管理层控股.对此,曹国伟的解释是:"江南春增持分众股份的做法触动

iostream-C++中一个关于_bufsize的难题?

问题描述 C++中一个关于_bufsize的难题? 最近在研究I/O缓冲,发现了一个问题,在网上搜了很久都没有答案. 先上代码: #include<iostream> #include<stdio.h> using namespace std; int main(){ printf("stdout buffer total size: %d ",stdout->_bufsiz); printf("stdout buffer used size:

《大咖讲Wireshark网络分析》—再来一个很妖的问题

再来一个很妖的问题 大咖讲Wireshark网络分析 有读者问,"叔叔,你那些很"妖"的网络问题是在哪找的?我也很感兴趣,但是从来没有遇到过." 叔叔听完这句话,顿时觉得心里好苦--都是这些"妖怪"自己找上门的,我想躲都来不及,哪会主动去找啊!我们全球有几千用户,假如每位用户每年遇到一次网络故障,我就有看不完的包了.<Wireshark网络分析的艺术>中讲到的那些案例,其实只占极小部分,公司电脑里还躺着几百个案例等着整理呢.既然你们对

对于所有互联网及互联网化的企业而言,O2O是当下一个很热门的话题

对于所有互联网及互联网化的企业而言,O2O是当下一个很热门的话题,也是一个很急切的商业课题.用马云(微博)的话讲,就是"电商终被O2O取代,不做O2O的企业必亡". 于是,无论是以商聚人的电商型平台,如阿里.京东等,还是以人聚商的社交型平台,如腾讯微信.新浪微博等,当然也包括电商化的传统零售企业如万达.苏宁等,以及信息分类网站如58同城.赶集网等,还有团购网站及其他各种类型的电商,都正在积极探索O2O模式的N种可能. O2O的本质及问题 在芝麻哥看来,O2O谈不上什么新的商业模式,其本

java-新手问一个很奇怪的问题

问题描述 新手问一个很奇怪的问题 class Demo { int num = 1; int add = 2; Demo() { num = 5; add = 6; } void show() { System.out.println("Fu num="+num+" Fu add="+add); } } class DemoA extends Demo { DemoA() { this.num = 3; this.add = 4; } void show() { S

字符串-一个很基础的返回值问题

问题描述 一个很基础的返回值问题 想要打印字符串数组,去掉中间的空格和Tab,并且删除全为空的行,哪里有错?谢谢. #include #define MAXLINE 1000 int getline(char line[], int maxline); int copy(char to[],char from[]); int main(){ int len; int max; char line[MAXLINE]; max=0; while ((len=getline(line,MAXLINE)