#include <iostream>

#include <string>

using namespace std ;

/*

题目:给一个字符串、例如 “ababc”要求返回“ab”. 因为“ab”连续重复出现且最长。

用C/C++语言写一函数完成该算法,给出复杂度

这道题的最终目的是找到最长的连续字符串

*/

struct SubStringInfo

{

 int maxSubStrLength ;//最长字符串的长度

 string str ;//最长字符串

}strData;

bool Check(string &str,string substr) //检测某字符串是否连续

{

 int pre ; //前串

 int next;//后串

 if(str.length()==substr.length())

  return false ;

 pre=str.find(substr);  //查找字符串出现的位置

 if(pre==-1) return false; //如果找不到那么返回 string::npos到头  -1

 next=str.find(substr,pre+substr.length());

 if(next==pre+substr.length())

  return true ; 

 return false;

}

void SearchString(SubStringInfo &info,string &str)

{

 int len=str.length() ;//获取string长度 

 string  eachMaxString="";

 string  tem="";

 bool ret=false ;

 int index=0 ;

 for(int i=1;i<=len;i++)  //每个子串长度

 {  

  index=0;

  cout<<"Sub String Length:"<<i<<": "<<endl ;

  for(int j=len-i+1;j>0;j--)//该长度的子字符串有多少个

  {    

   tem=str.substr(index,i);//获取子字符串

   cout<<"index="<<index<<" "<<"i="<<i<<" "<<tem<<" " ;

   index++;

   ret=Check(str,tem) ;//检测

   if(ret)

   {  

    if(tem.length()>info.maxSubStrLength)

    {

     info.maxSubStrLength=tem.length() ;//保存长度

     info.str=tem ;

    }

   } 

  }

  cout<<"\n";

 }

}

void main()

{    

    strData.maxSubStrLength=0;  //初始化结构体

 strData.str="";

 string  str ;  //接受要输入的字符串 

 cout<<"输入字符串:"<<endl ;

 cin>>str ;    

 SearchString(strData,str) ;//搜索字符串

 cout<<"最长的连续字符串为:"<<strData.str<<endl;

}

最新文章

  1. Go - template 常用方法详解 及 注意事项
  2. UINavigationBar 总结
  3. Android Hotpatch系列之-给release包打Patch
  4. 安装rkhunter
  5. ADIv5.2
  6. [转载]解决zabbix在configure时候遇到的问题(Ubuntu)
  7. Oracle删除重复数据的几种常用方法
  8. [BZOJ 3282] Tree 【LCT】
  9. iOS 代码分类
  10. nodejs服务器部署教程二
  11. Spring中使用Map、Set、List、数组、属性集合的注入方法配置文件
  12. 【NOIP2012提高组】同余方程
  13. GMA Round 1 空降
  14. HDU1075 字典树板子题
  15. 【tmos】SpringBoot+WebSocket打包时候的注意点
  16. c++ 生成dll文件并调用
  17. iOS开发 -------- UITableView的编辑
  18. 基于NDK的Android防破解&amp; Android防破解 【转载】
  19. GO_05_2:Golang 中 panic、recover、defer 的用法
  20. HDUOj Ignatius and the Princess III 题目1002

热门文章

  1. 学习笔记-[Maven实战]-第二章:Maven安装和配置
  2. 手势识别官方教程(6)识别拖拽手势用GestureDetector.SimpleOnGestureListener和onTouchEvent
  3. WCF - Architecture
  4. 使用Visual Studio进行单元测试
  5. NOI2014 动物园
  6. [ECNU 1624] 求交集多边形面积
  7. win7无法识别U盘,驱动信息:该设备的驱动程序未被安装。 (代码 28)
  8. web网站加速之CDN(Content Delivery Network)技术原理
  9. C#:实体类中做数据验证
  10. C#父类对象和子类对象之间的转化