牛客網模擬題-偶串
阿新 • • 發佈:2019-01-29
如果一個字串由兩個相同字串連線而成,就稱這個字串是偶串。例如"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(); } }