字符串例题
时间:2022-06-06
本文章向大家介绍字符串例题,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
京东笔试题
给定一个字符串s,请计算输出含有连续两个s作为子串的最短字符串。注意两个s可能有重叠部分。例如,"ababa"含有两个“aba". 输入描述: 输入包括一个字符串s,字符串长度length(1<=length<=50),s中每个字符都是小写字符。 输出描述: 输出一个字符串,即含有连续两个s作为子串的最短字符串。 示例1 输入:abracadabra 输出:abracadabracadabra 思路:求出原字符串的next数组,假设原字符串长度为n,再求next[n]位置的值,表示后面需要补下标为next[n]开始到结尾的字符,举个例子:str=abracadabra,next值分别是-1,0,0,0,1,0,1,0,1,2,2,然后再求next[n]的值为4,所以从下标为4开始一直往后的字符全部添加到结尾就变成了abracadabracadabra
import java.util.*;
public class Main {
public static String res(String str1) {
String tmp = "";
char[] s1 = str1.toCharArray();
int[] next = next(s1);
for(int i = next[str1.length()];i < str1.length();i++)
tmp += str1.charAt(i);
return str1 + tmp;
}
public static int[] next(char[] s1) {
if(s1.length == 0)
return new int[] {-1};
int[] next = new int[s1.length + 1];
next[0] = -1;
next[1] = 0;
int cn = 0;
int i = 2;
while(i <= s1.length) {
if(s1[i - 1] == s1[cn])
next[i++] = ++cn;
else if(cn > 0)
cn = next[cn];
else
next[i++] = 0;
}
return next;
}
}
某歌面试题
在末尾添加最少字符使得原字符串成为回文串 思路:manacher算法变形,当回文右边界R==str.length时,对应的[0,L)翻转过来添加到字符串后面即可
public static char[] manacherString(String str) {
char[] charArr = str.toCharArray();
char[] res = new char[str.length() * 2 + 1];
int index = 0;
for(int i = 0;i < res.length;i++)
res[i] = (i & 1) == 0 ? '#' : charArr[index++];
return res;
}
public static String maxLcpsLength(String str) {
if(str == null || str.length() == 0)
return "";
char[] charArr = manacherString(str);
int[] pArr = new int[charArr.length];//回文半径数组
int index = -1,pR = -1;//回文中心和回文最右边界
int maxContainsEnd = -1;
for(int i = 0;i != charArr.length;i++) {
pArr[i] = pR > i ? Math.min(pArr[2 * index - i],pR - i) : 1;
while(i + pArr[i] < charArr.length && i - pArr[i] > -1) {
if(charArr[i + pArr[i]] == charArr[i - pArr[i]])
pArr[i]++;
else
break;
}
if(i + pArr[i] > pR) {
pR = i + pArr[i];
index = i;
}
if(pR == charArr.length) {
maxContainsEnd = pArr[i];
break;
}
}
char[] res = new char[str.length() - maxContainsEnd + 1];
for(int i = 0;i < res.length;i++)
res[res.length - 1 - i] = charArr[i * 2 + 1];
return String.valueOf(res);
}
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- CentOS 6.8 安装vsftpd的方法步骤
- centos7下搭建ZooKeeper3.4中间件常用命令小结
- Linux性能测试 pmap命令详解
- Linux7.7设置交换分区SWAP的方法
- 在Linux里安装和启动nginx的方法
- Linux下如何对ISO文件编辑的方法示例
- Linux中创建新用户并赋予指定目录的相关权限
- Linux服务器下安装配置Nginx的教程
- Linux文件目录结构(小白版)
- 基于Linux中vnc配置端口号的修改方法
- Linux下安装grafana并且添加influxdb监控的方法
- 玩命学JVM:认识JVM和字节码文件
- 使用CatBoost进行不确定度估算:模型为何不确定以及如何估计不确定性水平
- 拒绝 kill -9,让 SpringBoot 优雅停机!
- SpringBoot整合Activiti7的实现代码