牛客网模拟题-偶串

来源:互联网 发布:我是大主宰服务端源码 编辑:程序博客网 时间:2024/06/05 15:06
如果一个字符串由两个相同字符串连接而成,就称这个字符串是偶串。例如"xyzxyz"和"aaaaaa"是偶串,但是"ababab"和"xyzxy"却不是。
牛牛现在给你一个只包含小写字母的偶串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();    }}