⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 repeat.cpp

📁 给定一个字符串str
💻 CPP
字号:
#include <iostream>
#include <fstream>
#include <string.h>  
using namespace std;
ifstream in("input.txt");
ofstream out("output.txt");

class String
{
public: 
	String(char *s=""); 
	String(String &s);
	~String();
	int ReadString();
	int String::Length();
	int Prefix();
	void String::LongestMatch();//最长重复子串求解函数
private:
	char *str;	
	int *pre;
	int size; 
};

String::String(char *s)
{
	size=strlen(s)+1;
	str=new char[size];
	if(str==0) throw;
	strcpy(str,s);
	pre=new int[size];
	if(pre==0) throw; 
}

String::String(String &s)
{
	size=s.size;
	str=new char [size];
	if(str==0)
		throw;
	strcpy(str,s.str);
	pre=new int[size];
	if(pre==0)
		throw;
}

String::~String()
{
	delete[]str;
	delete[]pre;
}

int String::ReadString()
{
	char source[1000000];
	delete[]str;
	in>>source;
	size=strlen(source)+1;
	str=new char[size];
	if(str==0) throw;
	strcpy(str,source);
	return size-1;
}

int String::Length()
{
	return size-1;
}

 
void String::LongestMatch()
{
	
	int mlength=0,count=0;
	
	int first;
	for(int i=1;i<=Length();i++)
	{
		for(int k=0,j=0;j<=Length()-i;j++)
		{
			if(str[j]==str[i+j]) k++; 
			else k=0;
			if(k>mlength)
			{
				first=j-k+1; 
				mlength=k;
			}
		}
	} 
	out<<mlength<<endl;
	if(mlength)
	{
		for(i=first;count<mlength;i++)
		{
			out<<str[i];
			count++;
		}
	}  
}

void main()
{
	
	
	String str;
	str.ReadString();
    str.LongestMatch();	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -