1. 程式人生 > 實用技巧 >[程式設計題] 字串成環判斷是否為迴文字串--位元組跳動筆試題

[程式設計題] 字串成環判斷是否為迴文字串--位元組跳動筆試題

字串成環判斷是否為迴文字串

題目描述

輸入一個字串,將該字串首尾成環,判斷能否從中某位置切分,然後產生迴文字串,是則輸出Yes,否則輸出No

示例

例如1:

輸入(字串)
aab
成環後從a a 中切分,得到迴文字串:
aba
輸出:Yes

Java程式碼

package ncompanydemos.p2_bytedance;

import java.util.Scanner;

/**
 * @author jiyongjia
 * @create 2020/7/4 - 15:03
 * @descp: 輸入一個字串,將該字串首尾成環,判斷能否從中某位置切分,然後產生迴文字串
 *
 * 例如:aba 成環後從a a 中切分,得到迴文字串 aba 輸出Yes,是迴文字串
 */
public class Exam02 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String s = scanner.nextLine();
        //呼叫
        String res = solve(s);
        System.out.println(res);
    }

    public static String solve(String s){
        char[] chars = s.toCharArray();

        for (int i = 0; i < chars.length; i++) {
            int length = chars.length;
            StringBuilder stringBuilder = new StringBuilder();
            int cur=i;
            while (length>0){
                stringBuilder.append(chars[cur%(chars.length)]);
                cur++;
                length--;
            }
            //呼叫迴文判斷
            boolean compare = compare(stringBuilder.toString());
            if (compare){
                return "Yes";
            }else {
                continue;
            }
        }
        //如果判斷完還是沒有迴文的,返回No
        return "No";
    }

    //字串迴文判斷
    private static boolean compare(String s) {
        char[] chars = s.toCharArray();
        int left = 0;
        int right = chars.length-1;
        int flag = chars.length/2;
        while (flag>0){
            if(chars[left]!=chars[right]){
                return false;
            }else {
                left++;
                right--;
                flag--;
            }
        }
        return true;
    }
}

測試輸出

測試1

測試2