C++面试题算法

简介: #include #include using namespace std ; /* 题目:给一个字符串、例如 “ababc”要求返回“ab”. 因为“ab”连续重复出现且最长。 用C/C++语言写一函数完成该算法,给出复杂度 这道题的最终目的是找到最长的连续字符串 *...

#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;
}

 

目录
相关文章
|
23天前
|
存储 算法 C++
C/C++工程师面试题(STL篇)
C/C++工程师面试题(STL篇)
36 6
|
23天前
|
存储 缓存 数据库
C/C++工程师面试题(数据库篇)
C/C++工程师面试题(数据库篇)
42 9
|
24天前
|
机器学习/深度学习 安全 算法
【图论】【割点】【C++算法】928. 尽量减少恶意软件的传播 II
【图论】【割点】【C++算法】928. 尽量减少恶意软件的传播 II
|
5天前
|
存储 缓存 算法
面试遇到算法题:实现LRU缓存
V哥的这个实现的关键在于维护一个双向链表,它可以帮助我们快速地访问、更新和删除最近最少使用的节点,同时使用哈希表来提供快速的查找能力。这样,我们就可以在 O(1) 的时间复杂度内完成所有的缓存操作。哈哈干净利索,回答完毕。
|
10天前
|
存储 缓存 算法
C++从入门到精通:4.6性能优化——深入理解算法与内存优化
C++从入门到精通:4.6性能优化——深入理解算法与内存优化
|
10天前
|
存储 算法 程序员
C++从入门到精通:2.2.1标准库与STL容器算法深度解析
C++从入门到精通:2.2.1标准库与STL容器算法深度解析
|
18天前
|
设计模式 算法 Java
如何在面试中应对编程与算法面试?
面试中,编程能力至关重要,主要分为三个层次:初级关注基本功,如语法、原理和常见问题解决;高级涉及数据结构与算法,基础算法如排序对中小厂重要,大厂则需深入数据结构;资深专家层次需精通设计模式,以保证代码的扩展性和维护性。提升编程技能可采用PDCA循环学习法,从计划到执行、检查、行动不断迭代。通过实践项目如开发后端系统、测试框架来检验学习成果,并逐步学习算法和设计模式。坚持不懈的努力和重构将助你成为技术专家。记住,超越大多数人的关键在于持续学习和专注深耕。
7 0
如何在面试中应对编程与算法面试?
|
19天前
|
算法 搜索推荐 C++
浅谈sort函数底层(一道c++面试的天坑题)
浅谈sort函数底层(一道c++面试的天坑题)
|
24天前
|
人工智能 算法 BI
【图论】【 割边】【C++算法】1192. 查找集群内的关键连接
【图论】【 割边】【C++算法】1192. 查找集群内的关键连接
|
24天前
|
算法 测试技术 C#
【模拟】【C++算法】2826. 将三个组排序
【模拟】【C++算法】2826. 将三个组排序