【程序员面试宝典】递归之两个字符串连接次序问题(P83)
2012-08-28 22:09
218 查看
题目:
输入两个字符串,比如abdbcc和abc,输出第二个字符串在第一个字符串中的连接次序。即输出125、126、145、146.
解决方案:
此处仅考虑第一个字符串中的字符在第二个字符串中的相对位置不变的情况。
此时,可以按照递归的思路思考如下:
(1)递归过程中:
采用两个指针分别指向两个字符串,对应字符相同,则同时后移,然后继续递归查找后面的相同的字符;
(2)边界:
当记录的次序长度已经和第二个字符串长度相等,则可以输出了。
因此,代码如下:
输入两个字符串,比如abdbcc和abc,输出第二个字符串在第一个字符串中的连接次序。即输出125、126、145、146.
解决方案:
此处仅考虑第一个字符串中的字符在第二个字符串中的相对位置不变的情况。
此时,可以按照递归的思路思考如下:
(1)递归过程中:
采用两个指针分别指向两个字符串,对应字符相同,则同时后移,然后继续递归查找后面的相同的字符;
(2)边界:
当记录的次序长度已经和第二个字符串长度相等,则可以输出了。
因此,代码如下:
#include <iostream> #include "stdio.h" #include <string.h> using namespace std; void PrintfArray(char *p_str,char *s_str,int *print_arr,int p_len,int s_len,int print_arr_num,int p_start_num,int s_start_num){ int pStartnum = p_start_num,sStartnum = s_start_num; int printnum = print_arr_num; if(printnum == s_len) { for(int i=0;i < s_len;i++) { cout<<*(print_arr+i) <<" "; } cout<<endl; return; } for(int i=pStartnum;i<p_len;i++) { for(int j=sStartnum;j<s_len;j++) { if(*(p_str+i) == *(s_str+j)) { print_arr[printnum] = i+1; pStartnum = i; sStartnum = j; PrintfArray(p_str,s_str,print_arr,p_len,s_len,printnum+1,pStartnum+1,sStartnum+1); } } } } void Con(char *p_str,char *s_str){ int p_len = strlen(p_str); int s_len = strlen(s_str); int *print_arr=new int[s_len]; unsigned int print_arr_num=0; if(NULL==p_str && NULL==s_str) { cout<<"error"<<endl; return; } if(NULL==print_arr){ cout<<"error1"<<endl; return; } PrintfArray(p_str,s_str,print_arr,p_len,s_len,0,0,0); } main(){ char ParString[]="abdbcc"; char SonString[]="abc"; Con(ParString,SonString); system("pause"); return 0; }
相关文章推荐
- 【程序员面试宝典】递归之两个字符串连接次序问题(P83)
- 程序员面试宝典 8.2 典型递归问题: 面试例题1: 输入两个字符串,比如 abdbcc 和 abc, 输出第二个字符串在第一个字符串中的连接次序。即输出 125, 126, 145, 146.
- 输入两个字符串,比如abdbcc和abc,输出第二个字符串在第一个字符串中的连接次序(递归方法)
- 《程序员面试宝典》:输入两个字符串,比如abdbcc和abc,输出第二个字符串在第一个字符串中的连接次序,即输出125,126,145,146
- 输入两个字符串,比如abdbcc和abc,输出第二个字符串在第一个字符串中的连接次序(递归方法)
- 输入两个字符串,比如abdbcc和abc,输出第二个字符串在第一个字符串中的连接次序(递归方法)
- 程序员面试宝典之输入两个字符串,比如abdbcc和abc,输出第二个字符串在第一个字符串中的连接次序,即输出125,126,145,146
- 输入两个字符串,比如abdbcc和abc,输出第二个字符串在第一个字符串中的连接次序
- strcat()连接两个字符串的问题分析
- 《程序员面试宝典》求取第二个字符串在第一个字符串中的连接次序---递归算法
- 输入两个字符串,比如abdcc和abc,输出第二个字符串在第一个字符串中的连接次序
- 输入两个字符串,比如abdbcc和abc,把abc在abdbcc中的连接次序输出
- 输入两个字符串,输出第二个字符串在第一个字符串中的连接次序
- 一个看似简单却复杂的问题:求两个字符串的 左向右匹配 所有的 最长连续的 公共子字符串( 在每个字符串中先后次序相同的) 序列
- 两个字符串连接输出乱码问题解决
- 字符串问题:输出第二个字符串在第一个字符串中的连接次序
- strcat()连接两个字符串的问题分析
- .Net数据连接中的连接字符串问题
- 打靶问题c++代码递归实现——程序员面试宝典
- 字符串输入连接比较还有关于cin的问题