牛客网模拟题-偶串

如果一个字符串由两个相同字符串连接而成,就称这个字符串是偶串。例如"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



你可能感兴趣的:(公司笔试题)