Java-02

时间:2024-11-03 14:59:34

笔试算法:

41.

回文串

我们称一个字符串为回文串,当且仅当这个串从左往右和从右往左读是一样的。例如,aabbaa、a、abcba 是回文串,而 ab、ba、abc 不是回文串。注意单个字符也算是回文串。

现在,给你一个长度为n的字符串 S,接下来需要将这个串重新排列,组成一个新的字符串 T。

首先,T 一开始为空,之后进行如下操作:从左往右开始,剪切 S 中开头 k 个字符构成的子串。如果该子串是一个回文串,就将其拼接在 T 的前面;否则,将其拼接在 T 的末尾。其中 k 是一个给定的参数。

你需要输出最后 T 是多少。

时间限制:C/C++ 1秒,其他语言2秒

空间限制:C/C++ 256M,其他语言512M

输入描述:

第一行两个正整数 n,k (1<= n,k <= 105),其中 k 是 n 的因子。
第二行输入字符串 S。该字符串仅由小写英文字母组成。

输出描述:

输出一行一个字符串,表示 T。

示例1

输入例子:

12 3
ababaacbaccc

输出例子:

cccababaacba

先进行条件判断,之后是简单的逻辑

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n=sc.nextInt();
        int k=sc.nextInt();
        sc.nextLine();
        String s=sc.nextLine();
        if(k==1){
            String result=new StringBuilder(s).reverse().toString();
            System.out.println(result);
        }
        else if(n<=k){
            System.out.println(s);
        }
        else{
            String result="";
            if(n%k==0){
                for(int i=0;i<n/k;i++){
                    String smallString=s.substring(i*k,i*k+k);
                    String smallReverse=new StringBuilder(smallString).reverse().toString();
                    if(smallReverse.equals(smallString)){
                        result=smallString+result;
                    }else{
                        result=result+smallString;
                    }
                }
            }else{
                for(int i=0;i<n/k;i++){
                    String smallString=s.substring(i*k,i*k+k);
                    String smallReverse=new StringBuilder(smallString).reverse().toString();
                    if(smallReverse.equals(smallString)){
                        result=smallString+result;
                    }else{
                        result=result+smallString;
                    }
                }
                String duo=s.substring(n/k*k,n);
                String duoReverse=new StringBuilder(duo).reverse().toString();
                if(duo.equals(duoReverse)){
                    result=duo+result;
                }else{
                    result=result+duo;
                }
            }
            System.out.println(result);
        }
    }
}

成功AC。

近日总结:

哇哈哈哈今天是我生日,原本自己都要忘记今天是自己的生日了,我妈突然给我发消息说今天是我生日,一看日历,哈哈今天是我生日。

但是始终还是在自己生日这天是感到有些沉闷的,因为我的生日也代表着是妈妈的受难日,第一反应就是想给妈妈送礼物。

而且如果是在家的话就不是一个人了。。。。。。

不过,21岁生日最后还是就这样吧。

 加油加油努力努力!!!

别再老划水摸鱼了,都快到新年了,再划水,还怎么找工作啊!

看看上面那shi一样的代码,我就觉得,真难受啊。

算了,等待会儿回宿舍的路上买点好吃的吧。

呜呜呜想家了呜呜呜

【水中孤独的猫】 

相关文章