1. 程式人生 > >牛客網模擬題-偶串

牛客網模擬題-偶串

如果一個字串由兩個相同字串連線而成,就稱這個字串是偶串。例如"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();
    }
}