C++实现在一个字符串中寻找最大子串

//#include "stdafx.h"
#include<iostream>
#include<vector>
#include<string>
#include<utility>
using namespace std;
pair<int ,string> fun(const string &s)
{
	vector<string> substrs;
	string substr;
	int length=s.length();
	for(int i=0;i<length;++i)
	{
		substrs.push_back(s.substr(i,length-i));

	}
	cout<<"后缀子串分别为"<<endl;
	for(vector<string>::size_type index=0;index!=substrs.size();++index)
		cout<<substrs[index]<<endl;
	int count=0,maxcount=0;
	for(int i=0;i<length;++i)
	{
		for(int j=i+1;j<length;++j)
		{   count=1;
			if(substrs[i].substr(0,j)==substrs[j].substr(0,j))
			{
				++count;
				for(int k=j+(j-i);k<length;k+=j-i)
				{
					if(substrs[i].substr(0,j-i)==substrs[k].substr(0,j-i))
					{
						++count;
					}
					else
					break;

				}
				if(count>maxcount)
			   {
				maxcount=count;
				substr=substrs[i].substr(0,j-i);

			   }
			}

		}
	}
	return  make_pair(maxcount,substr);
}
int main()
{   string s("abcbcbcabc");
    pair<int,string> pair;
	pair=fun(s);
	cout<<pair.second<<" "<<pair.first<<endl;

	system("pause");
	return 0;
}

时间: 2024-08-07 08:05:20

C++实现在一个字符串中寻找最大子串的相关文章

在一个字符串中寻找某个字串

1 public int strStr(String haystack, String needle) { 2 for(int i = 0; ; i++) { 3 for(int j = 0; ; j++) { 4 if(j == needle.length()) { 5 return i; 6 } 7 8 if(i+j == haystack.length()) { 9 return -1; 10 } 11 12 if(needle.charAt(j) != haystack.charAt(i

17.在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b

转载请注明出处:http://www.cnblogs.com/wuzetiandaren/p/4261992.html 声明:现大部分文章为寻找问题时在网上相互转载,此博是为自己做个记录记录,方便自己也方便有类似问题的朋友,本文的思想也许有所借鉴,但源码均为本人实现,如有侵权,请发邮件表明文章和原出处地址,我一定在文章中注明.谢谢. 题目:在一个字符串中找到第一个只出现一次的字符.如输入abaccdeff,则输出b . 题目分析: 求字符串的某个字符出现的次数可以很巧妙的运用split("字符&

获取两个字符串中最大相同子串

2.获取两个字符串中最大相同子串.第一个动作:将短的那个串进行长度一次递减的子串打印. "cvhellobnmtanop" "andefc" 思路: 1,将短的那个子串按照长度递减的方式获取到. 2,将每获取到的子串去长串中判断是否包含,如果包含,已经找到! package tan; class Test { public static String getMaxSubString(String s1,String s2) { String max = "

模拟实现在一个字符串中查找一个字符串

在标准库中有一个函数strstr()用于在一个字符串中查找一个规定的字符串,这个函数可以模拟实现一下,代码如下: #include <stdio.h> #include <assert.h> char *my_strstr(const char str[],const char strstr[]) {  int i = 0,j = 0,k = 0;  assert(str != NULL);  assert(strstr != NULL);  for(i = 0;str[i] !=

HDU 4622 求解区间字符串中的不同子串的个数

题目大意: 给定一个长度<2000的串,再给最多可达10000的询问区间,求解区间字符串中的不同子串的个数 这里先考虑求解一整个字符串的所有不同子串的方法 对于后缀自动机来说,我们动态往里添加一个字符,每次添加一个字符进去,我们只考虑那个生成的长度为当前长度的后缀自动机的节点 那么这个节点可接收的字符串的个数就是( p->l - p->f->l ),也就是以当前点为最后节点所能得到的与之前不重复的子串的个数 那么这个问题就很好解决了,共2000个位置,以每一个位置为起点构建一次后缀

在一个字符串中截取指定字符串,域名截取,尝试截取不同网址的域名?

/** * 在一个字符串中截取指定字符串,域名截取,尝试截取不同网址的域名? *比如www.163.com,www.sohu.com.cn * 字符串截取就需要用subString() * 索引的位置,这里需要找第一个"."作为每次域名的开始索引,然后找下一个("."+1)作为结束位置 * 第一个点好找,indexOf搞定,第二点,用indexOf(".",之前的"."+1)找到 */ public class StringD

【C语言】模拟实现strchr函数.即在一个字符串中查找一个字符第一次出现的位置并返回

//模拟实现strchr函数.即在一个字符串中查找一个字符第一次出现的位置并返回 #include <stdio.h> //#include <string.h> #include <assert.h> char* my_strchr(char *dst, char src) { assert(dst); while (*dst != '\0') { if (*dst == src) return dst; dst++; } return 0; } int main()

在一个字符串中找到第一个只出现一次的字符。

题目:在一个字符串中找到第一个只出现一次的字符.如输入abaccdeff,则输出b. 分析:这道题是2006年google的一道笔试题. 下面给我的解法,采用linkedhashmap的有序,即可实现 private void getOne(String str){ LinkedHashMap<String, Object> linked=new LinkedHashMap<String, Object>(); for (char charstr : str.toCharArray

在一个字符串中找到第一个仅仅出现一次的字符

Google 2006年的一道笔试题,难度系数低 题目描写叙述: 在一个字符串中找到第一个仅仅出现一次的字符.如输入abaccdeff,则输出b. 逻辑分析: 1.简单粗暴O(n^2),一个显而易见的想法是像冒泡排序一样,採用两个循环,内层循环对外层判定元素arr[i]进行轮询,当发现arr[i] == arr[j]时,本次循环终止,显然,时间复杂度O(n^2),不使用额外空间. #include <stdio.h> #include <stdlib.h> #include <