牛客网模拟题-偶串
来源:互联网 发布:我是大主宰服务端源码 编辑:程序博客网 时间:2024/06/05 15:06
如果一个字符串由两个相同字符串连接而成,就称这个字符串是偶串。例如"xyzxyz"和"aaaaaa"是偶串,但是"ababab"和"xyzxy"却不是。
牛牛现在给你一个只包含小写字母的偶串s,你可以从字符串s的末尾删除1和或者多个字符,保证删除之后的字符串还是一个偶串,牛牛想知道删除之后得到最长偶串长度是多少。
牛牛现在给你一个只包含小写字母的偶串s,你可以从字符串s的末尾删除1和或者多个字符,保证删除之后的字符串还是一个偶串,牛牛想知道删除之后得到最长偶串长度是多少。
输入描述:
输入包括一个字符串s,字符串长度length(2 ≤ length ≤ 200),保证s是一个偶串且由小写字母构成
输出描述:
输出一个整数,表示删除之后能得到的最长偶串长度是多少。保证测试数据有非零解
输入例子1:
abaababaab
输出例子1:
6
解题思路:此题思路很单纯,即从字符串最后面开始删除字符,然后判断删除后的字符串是否满足偶串的要求。这里需要注意一下,因为题目说偶串知识由两个周期串连接而成,因此在删除字符的时候需要判断当前字符串的长度的奇偶性。如果是偶数,那么每次删除也必须是偶数;如果是奇数,第一次删除奇数个,然后每次删除偶数个。判断一个字符串是否为偶串的思路也很简单,我们把删除后的字符串均等分成两份,判断两个子字符串是否相等,如果相等,那么它满足偶串的条件,如果不相等,继续在字符串尾部删除。
import java.util.Scanner;/** * Created by 76911 on 2017/7/25. */public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNext()) { String str = sc.next(); // char[] ch = str.toCharArray(); int len =str.length(); int result = 0; if (len % 2 == 0) { int num = len / 2; int i = 2; for (int j = 1; j < num; j++) { //一共可以删除 num -1次 String str1 = str.substring(0, len - j * i); int len1 = str1.length(); String s1 = getHalfLeft(str1); String s2 = getHalfRight(str1); if (s1.equals(s2)) { result = len1; break; } } } else { String str1 = str.substring(0, len - 1); //从0取到 第 len-2 个字符 int len1 = str1.length(); String s1 = getHalfLeft(str1); String s2 = getHalfRight(str1); if (s1.equals(s2)) { result = len1; System.out.println(result); } int nums = len1 / 2; int i = 2; for (int j = 1; j < nums; j++) { //一共可以删除 num -1次 String str2 = str.substring(0, len - j * i); int len2 = str2.length(); String ss1 = getHalfLeft(str2); String ss2 = getHalfRight(str2); if (ss1.equals(ss2)) { result = len2; break; } } } System.out.println( result); } } private static String getHalfLeft(String s){ //获取左子串 char[] str = s.toCharArray(); int len = str.length; StringBuilder sb = new StringBuilder(); for(int i=0;i<len/2;i++){ sb.append(String.valueOf(str[i])); } return sb.toString(); } private static String getHalfRight(String s){ //获取右子串 char[] str = s.toCharArray(); int len = str.length; StringBuilder sb = new StringBuilder(); for(int i=len/2;i<=len-1;i++){ sb.append(String.valueOf(str[i])); } return sb.toString(); }}
阅读全文
0 0
- 牛客网模拟题-偶串
- 牛客网模拟题-贴瓷砖
- 牛客网模拟题-制造回文
- 模拟题
- 模拟题
- 模拟题
- 【算法】牛客网模拟题编程部分
- 牛客网模拟测试 3 道编程题
- nyoj 1187 模拟2048 (模拟题)
- 【NOIP 模拟题】[T1]return(模拟)
- [NOIP模拟题][模拟][DP][乱搞]
- NOIP模拟题 [模拟][DP][线段树]
- scjp的模拟题
- 面试模拟题3
- 面试模拟题4
- 面试模拟题5
- Poj 模拟题
- hdoj1008(模拟题)
- Java静态代理&动态代理笔记
- Java实现一个简单的缓存
- 小程序server- 搭建HTTPS server
- Apache Commons FileUpload
- Kettle7.1 学习笔记
- 牛客网模拟题-偶串
- centos6.8下安装mongodb-3.2.10
- poj 3264 Balanced Lineup 线段树
- HDU 6038 Function
- Python爬虫入门(5):URLError异常处理
- linux mysql创建用户赋权限
- word2vec
- C++ Vector STL find 查找
- layout优化减少textView创建