链接:https://www.nowcoder.com/acm/contest/77/C
来源:牛客网

字符串的问题
时间限制:C/C++ 2秒,其他语言4秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述

有一个字符串 让你找到这个字符串 S 里面的子串T 这个子串 T 必须满足即使这个串的前缀 也是这个
串的后缀 并且 在字符串中也出现过一次的(提示 要求满足前后缀的同时也要在字符串中出现一次 只是前后缀可不行 输出最长满足要求字符串)

输入描述:

给出一个字符串 长度 1 到 1e6  全部是小写字母

输出描述:

如果找的到就输出这个子串T 如果不行就输出 Just a legend

输入例子:
fixprefixsuffix
输出例子:
fix

-->

示例1

输入

fixprefixsuffix

输出

fix
示例2

输入

abcdabc

输出

Just a legend

ubstr(字符串,截取开始位置,截取长度) //返回截取的字

substr('Hello World',0,1) //返回结果为 'H'  *从字符串第一个字符开始截取长度为1的字符串

substr('Hello World',1,1) //返回结果为 'H'  *0和1都是表示截取的开始位置为第一个字符

substr('Hello World',2,4) //返回结果为 'ello'

substr('Hello World',-3,3)//返回结果为 'rld' *负数(-i)表示截取的开始位置为字符串右端向左数第i个字符

测试:

select substr('Hello World',-3,3) value from dual;

find函数的使用:

#include<iostream>
#include<cstring>
#include <string>
using namespace std;
string s;
string s1;
int main()
{
cin >> s;
cin >> s1;
cout << s.find(s1) << endl;
}

asdfghhjd

fgh

3

asd

sd

1

aaaa

bb

4294967295

本题题解:

 #include<iostream>
#include<cstring>
#include <string>
using namespace std;
string s;
int main()
{
cin >> s;
int k = , l = s.size();
string ans = "";
while (l> && k<l)
{
string ss = s.substr(, k);//拷贝s第0个数开始,长度为k
if (s.substr(l - k, k) == ss)
{
string sss = s.substr(, l - );
///cout << sss.find(ss) << endl;
if (sss.find(ss)<l - )
ans = ss;
}
k++;
}
if (ans == "")
cout << "Just a legend" << endl;
else
cout << ans << endl;
}

kmp:

 #include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define N 1000010
char s[N];
int ne[N],a[N],b[N];
void get(int x)
{
ne[]=ne[]=;
int i,j;
for(i=;i<x;i++)
{
j=ne[i];
while(j&&s[i]!=s[j])
j=ne[j];
ne[i+]=(s[i]==s[j]?j+:);
}
}
int main()
{
int i,j,k,tot;
scanf("%s",s);
k=strlen(s);
get(k);
j=k;
tot=;
while(ne[j])
{
if(ne[j])
a[tot++]=ne[j];
j=ne[j];
}
for(i=k;i>=;i--)
{
b[i]++;
b[ne[i]]+=b[i];
}
for(i=;i<tot;i++)
{
if(b[a[i]]>=)
{
for(j=;j<a[i];j++)
printf("%c",s[j]);
printf("\n");
return ;
}
}
printf("Just a legend\n");
return ;
}

我的wa代码

 #include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
using namespace std;
int n,m;
char a[];
char c[];
char b[];
int nxt[];
void get_nxt(int *nxt,char *a,int l)
{
int i = ;
int j = -;
nxt[] = -;
while (i < l)
{
if (j == - || a[i] == a[j]) nxt[++i] = ++j;
else j = nxt[j];
}
}
bool kmp(char *b,char *a,int la,int lb)
{
int i, j;
i = ;
j = ;
while (i<la)
{ if (a[i] == b[j] || j == -) //进行两个字符串的匹配
{
i++;//匹配成功,往后继续匹配
j++;
}
else//匹配完成一次,代表出现了一次,记录下来
{
j = nxt[j];
}
if (j == lb)
{
return ;
}
}
return ;
}
int main()
{
int k = ;
int i;
cin >> a;
int n = strlen(a);
get_nxt(nxt,a,n);
int j=;
bool f = ;
int t = nxt[n];
int kk = nxt[n];
int p = ;
for (i = ; i <= n - ; i++)
c[j++] = a[i];
while (t)
{
if (a[kk - p - ] != a[n - ]) break;
for (j = ; j <= t - ; j++)
b[j] = a[j];
j = ;
m = t;
memset(nxt, , sizeof(nxt));
get_nxt(nxt, b, t);
f = kmp(b, c, n - * t, t);
if (f)
{
for (j = ; j <= t - ; j++)
cout << b[j];
break;
}
t--;
p++;
}
if (!f) cout << "Just a legend" << endl;
else cout << endl;
return ;
}

字符串的问题(substr,find用法)的更多相关文章

  1. js中substring和substr的用法

    js中substring和substr的用法 substring 方法用于提取字符串中介于两个指定下标之间的字符 substring(start,end) 开始和结束的位置,从零开始的索引 参数    ...

  2. Oracle substr() instr() 用法

    转载:oracle中substr() instr() 用法 substr(字符串,截取开始位置,截取长度) = 返回截取的字符串instr(源字符串,目标字符串,起始字符串,匹配字符串) = 返回要截 ...

  3. substring和substr的用法

    substring 方法用于提取字符串中介于两个指定下标之间的字符 substring(start,end) 开始和结束的位置,从零开始的索引 返回值是一个新的字符串,该字符串值包含 stringOb ...

  4. 【转】awk 里的substr函数用法举例

    awk 里的substr函数用法举例: 要截取的内容:2007-08-04 04:45:03.084 - SuccessfulTradeResult(status: 1, currencyPair: ...

  5. 字符串截取 及 substr 和 substring 的区别

    1..字符串截取 str.substr(0, 1) // 获取字符串第一个字符 str.substr(-1) // 获取字符串最后一个字符 str.charAt(str.length - 1) // ...

  6. php去掉字符串的最后一个字符附substr()的用法

    转自:http://www.jb51.net/article/26604.htm 今天项目中用到,去掉字符串中的最后一个字符 原字符串1,2,3,4,5,6, 去掉最后一个字符"," ...

  7. js中substring和substr的用法比较

    推荐使用substring 方法   stringObject.substring(start,stop)   stringObject.substr(start,length)   定义和用法 提取 ...

  8. js中substring和substr的用法 (转)

    1.substring 方法 定义和用法 substring 方法用于提取字符串中介于两个指定下标之间的字符. 语法 stringObject.substring(start,stop) 参数     ...

  9. 截取字符串一之substr

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. JS中substring与substr的用法

    substring方法用于提取字符串中介于两个指定下标之间的字符 substring(start,end) 开始和结束的位置,从零开始的索引javascript 参数 描述 start 必需.一个非负 ...

随机推荐

  1. confluence 部署与配置

    什么是confluence 部署步骤 安装 下载目标平台目标版本安装包.windows为例 若第一次默认安装 一直下一步. 若再次安装 下载并将mysql 连接控件放到 /xxx/xxx/conflu ...

  2. 分布式锁-基于ZK和Redis实现

    一.基于zookeeper实现分布式锁 1.1 Zookeeper的常用接口 package register; import java.util.List; import java.util.con ...

  3. Flask-WTF表单

    Web表单 Web 表单是 Web 应用程序的基本功能. 它是HTML页面中负责数据采集的部件.表单有三个部分组成:表单标签.表单域.表单按钮.表单允许用户输入数据,负责HTML页面数据采集,通过表单 ...

  4. 《Drools7.0.0.Final规则引擎教程》Springboot+规则重新加载

    在<Drools7.0.0.Final规则引擎教程>之Springboot集成中介绍了怎样将Drools与Springboot进行集成,本篇博客介绍一下集成之后,如何实现从数据库读取规则并 ...

  5. Mac怎么快速创建便签和发送附件的邮件

    1.如何快速创建便签        在Mac的任意界面选中文字:shift+command+y 就能创建便签2.如何快速发送附件的邮件(网页界面)        在Safari网页界面 command ...

  6. ubuntu 终端命令颜色的修改

    http://blog.chinaunix.net/uid-13954789-id-3137184.html http://blog.chinaunix.net/uid-26021340-id-348 ...

  7. JavaScript class 使用

    /********************************************************************* * JavaScript class 使用 * 说明: * ...

  8. 【排序】冒泡排序,C++实现

    原创文章,转载请注明出处! 博客文章索引地址 博客文章中代码的github地址 # 基本思想(从小到大排序)       对于给定的n个元素,从第一个元素开始,依次对相邻的两个元素进行比较,当前面的记 ...

  9. scrapy与scrapyd安装

    Scrapy是用python编写的爬虫程序. Scrapyd是一个部署与运行scrapy爬虫的应用,提供JSON API的调用方式来部署与控制爬虫 . 本文验证在fedora与centos是安装成功. ...

  10. 阿里面试题,N个士兵的通话问题

    战场上不同的位置有N个战士(n>4),每个战士知道当前的一些战况,现在需要这n个战士通过通话交流,互相传达自己知道的战况信息,每次通话,可以让通话的双方知道对方的所有情报,设计算法,使用最少的通 ...