最大公共字符串输出
2016-06-30 20:44
204 查看
一.华为OJ题目:
查找两个字符串a,b中的最长公共子串。
详细描述:
查找两个字符串a,b中的最长公共子串。
接口设计及说明:
/*****************************************************************************
Description : 查找两个字符串a,b中的最长公共子串
Input Param : String stringA, 输入字符串A
String stringB, 输入字符串B
Output Param :
Return Value : 成功返回最大公共子串,失败返回null(如:数据错误)
*****************************************************************************/
public static StringiQueryMaxCommString(String stringA, String stringB)
{
/* 在这里实现功能,将结果填入输入数组中*/
return null;
}
二.详细解答过程:
1.首先,计算2个字符串的长度。定义整形变量 counts,pos_end;lengthA=strA.length()
2.然后,进入两层循环:
(1)第一层循环,用i作递增变量(0~lengthA),初始化posA,countsA;
(2)第二层循环,用j作递增变量(0~lengthB)
进入第二层循环,寻找B字符串中与str[posA]相等的字符,如果找到,那么posA++,countsA++,
接着在第二层循环内继续寻找查看字符串B中是否下一个字符仍然与A字符串中的对应字符相同,
如果又找到,那么继续让posA++,countsA++,如果中间突然出现一个不相等然后后面一个又相等了怎么办?会不会出现误差?
事实证明不会出现这种情况,原因是posA++的同时j也在递增,所以他们是对应相等的时候,才会进入相应的条件语句
并且posA++,countsA++
(3)第二层循环结束之后,i++,那么再重新寻找公共字符串,如果找到更大的字符串,那么countsA>counts条件语句将成立
于是进入条件语句,counts更新,posA的位置也更新。(因为posA位置递增了,所以处理之后要-1)
3.该步骤将最大公共字符子串从末尾添加进string类str内;
4.函数返回str;
代码:
//求最大公共字符串并输出
查找两个字符串a,b中的最长公共子串。
详细描述:
查找两个字符串a,b中的最长公共子串。
接口设计及说明:
/*****************************************************************************
Description : 查找两个字符串a,b中的最长公共子串
Input Param : String stringA, 输入字符串A
String stringB, 输入字符串B
Output Param :
Return Value : 成功返回最大公共子串,失败返回null(如:数据错误)
*****************************************************************************/
public static StringiQueryMaxCommString(String stringA, String stringB)
{
/* 在这里实现功能,将结果填入输入数组中*/
return null;
}
二.详细解答过程:
1.首先,计算2个字符串的长度。定义整形变量 counts,pos_end;lengthA=strA.length()
2.然后,进入两层循环:
(1)第一层循环,用i作递增变量(0~lengthA),初始化posA,countsA;
(2)第二层循环,用j作递增变量(0~lengthB)
进入第二层循环,寻找B字符串中与str[posA]相等的字符,如果找到,那么posA++,countsA++,
接着在第二层循环内继续寻找查看字符串B中是否下一个字符仍然与A字符串中的对应字符相同,
如果又找到,那么继续让posA++,countsA++,如果中间突然出现一个不相等然后后面一个又相等了怎么办?会不会出现误差?
事实证明不会出现这种情况,原因是posA++的同时j也在递增,所以他们是对应相等的时候,才会进入相应的条件语句
并且posA++,countsA++
(3)第二层循环结束之后,i++,那么再重新寻找公共字符串,如果找到更大的字符串,那么countsA>counts条件语句将成立
于是进入条件语句,counts更新,posA的位置也更新。(因为posA位置递增了,所以处理之后要-1)
3.该步骤将最大公共字符子串从末尾添加进string类str内;
4.函数返回str;
代码:
//求最大公共字符串并输出
#include <iostream> #include <string> using namespace std; static string iQueryMaxCommString(string&stringA, string stringB) { int cnts=0,pos_end,lenA,lenB; lenA=stringA.size(); lenB=stringB.size(); for(int i=0;i<lenA;i++) { int posA=i; int countA=0; for(int j=0;j<lenB;j++) { if(stringA[posA]==stringB[j]) { countA++; ++posA; if(cnts<countA) { cnts=countA; pos_end=posA-1; } } } } string str; int begin=pos_end-cnts+1; for(int j=begin;j<=pos_end;j++) { str.push_back(stringA[j]); } return str; } intmain() { string str1,str2; getline(cin,str1); getline(cin,str2); cout<<iQueryMaxCommString(str1,str2)<<endl; return 0; }
相关文章推荐
- 常用二极管IN4148和单片机驱动的一些关系
- 面试题21:包含min函数的栈
- Tomcat 7.0的配置及发布多个web应用以及不同端口多工程配置(第二版)
- QQ IDKey生成--一键加群
- 二叉树的镜像
- 倒计时练习
- Linux 下网络相关命令
- keil 之map文件应用
- 外网主机访问虚拟机中的部署在tomcat上的web项目
- hadoop中mr处理大量小文件
- GUI编程 action事件
- Nginx搭建图片服务器(Windows)
- 比较练习
- 如何查看Apache的configure编译参数
- stm32 keil debug 调试笔记二
- 会话控制
- PullRefreshGridView 下拉刷新,上拉加载
- Swift网络封装库Moya中文手册之Endpoints
- Codeforces Round #360 (Div. 2) E. The Values You Can Make DP
- 大数加法