字符串的问题(substr,find用法)
链接:https://www.nowcoder.com/acm/contest/77/C
来源:牛客网
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
串的后缀 并且 在字符串中也出现过一次的(提示 要求满足前后缀的同时也要在字符串中出现一次 只是前后缀可不行 输出最长满足要求字符串)
输入描述:
给出一个字符串 长度 1 到 1e6 全部是小写字母
输出描述:
如果找的到就输出这个子串T 如果不行就输出 Just a legend
输入例子:
fixprefixsuffix
输出例子:
fix
-->
输入
fixprefixsuffix
输出
fix
输入
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用法)的更多相关文章
- js中substring和substr的用法
js中substring和substr的用法 substring 方法用于提取字符串中介于两个指定下标之间的字符 substring(start,end) 开始和结束的位置,从零开始的索引 参数 ...
- Oracle substr() instr() 用法
转载:oracle中substr() instr() 用法 substr(字符串,截取开始位置,截取长度) = 返回截取的字符串instr(源字符串,目标字符串,起始字符串,匹配字符串) = 返回要截 ...
- substring和substr的用法
substring 方法用于提取字符串中介于两个指定下标之间的字符 substring(start,end) 开始和结束的位置,从零开始的索引 返回值是一个新的字符串,该字符串值包含 stringOb ...
- 【转】awk 里的substr函数用法举例
awk 里的substr函数用法举例: 要截取的内容:2007-08-04 04:45:03.084 - SuccessfulTradeResult(status: 1, currencyPair: ...
- 字符串截取 及 substr 和 substring 的区别
1..字符串截取 str.substr(0, 1) // 获取字符串第一个字符 str.substr(-1) // 获取字符串最后一个字符 str.charAt(str.length - 1) // ...
- php去掉字符串的最后一个字符附substr()的用法
转自:http://www.jb51.net/article/26604.htm 今天项目中用到,去掉字符串中的最后一个字符 原字符串1,2,3,4,5,6, 去掉最后一个字符"," ...
- js中substring和substr的用法比较
推荐使用substring 方法 stringObject.substring(start,stop) stringObject.substr(start,length) 定义和用法 提取 ...
- js中substring和substr的用法 (转)
1.substring 方法 定义和用法 substring 方法用于提取字符串中介于两个指定下标之间的字符. 语法 stringObject.substring(start,stop) 参数 ...
- 截取字符串一之substr
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- JS中substring与substr的用法
substring方法用于提取字符串中介于两个指定下标之间的字符 substring(start,end) 开始和结束的位置,从零开始的索引javascript 参数 描述 start 必需.一个非负 ...
随机推荐
- Django-RestfulFramework --- DRF
>> (1)RESTful api 规范 和 DRF 的基本介绍 >> (2)DRF 的 认证系统实现 >> (3)DRF 的 权限系统实现 >> (4 ...
- 开源一款资源分享与下载工具 —— 电驴(eMule)
这里分享一款资源分享与下载工具--电驴,其实严格来说,应该叫电骡,这是我维护的版本,eMuleVeryCD版本,VeryCD是一个不错的资源分享网站:http://www.verycd.com/.大概 ...
- java 多线程超详细总结——阿里大牛熬夜整理
引 如果对什么是线程.什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内. 用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现.说这个 ...
- Redis学习总结之一——Redis初入
Redis简介 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API. Redis是一个key-value存储系统. ...
- NET MVC 升级到5.1后,View视图中代码报错
使用nuget将项目中MVC4 升级到MVC5,之后项目还可以正常编译运行, 但View视图中相关的很多代码都报错,比如: 1.@model找不到 2.@Html找不到,本该是System.Web.M ...
- Jsp邮件找回密码全攻略
[来源网络 http://www.2cto.com/kf/201502/376374.html] 一般大型网站我们登录的时候,密码忘了都有个功能可以找回密码. 细数下大致的方法: 1.直接把密码发送 ...
- Hive SQL的编译过程[转载自https://tech.meituan.com/hive-sql-to-mapreduce.html]
https://tech.meituan.com/hive-sql-to-mapreduce.html Hive是基于Hadoop的一个数据仓库系统,在各大公司都有广泛的应用.美团数据仓库也是基于Hi ...
- flask第十八篇——模板【2】
请关注公众号:自动化测试实战 上一节我们介绍了模板的基本使用方法,现在我们想一个问题,如果把index.html放到template文件夹下面的文件夹该怎么办呢?其实很容易,当文件夹结构如下图所示时: ...
- VS2013中添加现有窗体项
假如要从另一项目中拷贝窗体到本项目中,例如FmMain窗体, 需要. 把FmMain.cs 和 FmMain.Designer.cs 和 FmMain .resx 三个文件复制到程序目录下, 在vs里 ...
- {Reship}{Sparse Representation}稀疏表示
===================================================== http://blog.sina.com.cn/s/blog_6d0e97bb01015wo ...