没有回文串

标题:没有回文串 | 时间限制:1秒 | 内存限制:65536K | 语言限制:不限
回文串的定义:正读和反读都一样的字符串 
现在已经存在一个不包含回文串的字符串,字符串的字符都是在英语字母的前N个,且字符串不包含任何长度大于等于2的回文串;请找出下一个字典序的不包含回文串的、字符都是在英语字母的前N个、且长度相同的字符串。如果不存在,请输出NO。

import java.io.*;
import java.util.*;
public class Main {
    public static void main(String[] args)throws IOException{
        new Main().start();
    }
    public void start()throws IOException{
        BufferedReader br =new BufferedReader(new InputStreamReader(System.in));
        String s =br.readLine();
        while(s!=null){
            int maxCharNum = Integer.parseInt(s);
            String startStr = br.readLine().toLowerCase();
            char maxChar = (char)('a'+maxCharNum-1);
            String maxStr = getMaxStr(maxCharNum,startStr.length());
            String str = addOne(startStr,maxChar);
            boolean has = false;
            while(compare(maxStr,str)){
                if(!checkHuiWenTotal(str)){
                    System.out.println(str);
                    has =true;
                    break;
                }
                str=addOne(str,maxChar);
            }
            if(!has){
                System.out.println("NO");
            }
            s=br.readLine();
        }
    }
    public String addOne(String s,char maxChar){
        boolean upOne = true;
        StringBuilder sb = new StringBuilder(s.length());
        for(int i=s.length()-1;i>=0;i--){
            char c = s.charAt(i);
            if(upOne){
                upOne=false;
                c = (char)(c+1);
                if(c>maxChar){
                    c='a';
                    upOne=true;
                }
            }
            sb.append(c);
        }
        if(upOne){
            sb.append('a');
        }
        return sb.reverse().substring(0);
    }
    public boolean checkHuiWenTotal(String s){
        int maxLength = s.length();
        int minLength =2;
        int nowLength = maxLength;
        while (nowLength>=minLength){
            for(int i=0;i<=s.length()-nowLength;i++){
                if(checkHuiWen(s.substring(i,i+nowLength))){
                    return true;
                }
            }
            nowLength--;
        }
        return false;
    }
    public  boolean checkHuiWen(String s){
        int i = 0;
        int j = s.length()-1;
        char[] charArray = s.toCharArray();
        while(i<=j){
            if(charArray[i++]!=charArray[j--]){
                return false;
            }
        }
        return true;
    }
    public String getMaxStr(int maxCharNum,int length){
        char maxChar = (char)('a'+maxCharNum-1);
        StringBuilder sb =new StringBuilder(length);
        for(int i=0;i<length;i++){
            sb.append(maxChar);
        }
        return sb.substring(0);
    }

    public boolean compare(String s1,String s2){
        if(s1.length()>s2.length()){
            return true;
        }
        if(s1.length()<s2.length()){
            return false;
        }
        for(int i=0;i<s1.length();i++){
            if(s1.charAt(i)>s2.charAt(i)){
                return true;
            }
            if(s1.charAt(i)<s2.charAt(i)){
                return false;
            }
        }
        return false;
    }
}


全部评论

相关推荐

05-12 10:10
已编辑
门头沟学院 人工智能
写这篇之前我犹豫了挺久。一方面是怕被人骂,&quot;又一个收割焦虑的转行帖&quot;;另一方面是看了太多用&nbsp;GPT&nbsp;套娃出来的「学习路线」文章,AI&nbsp;味重得让人没法读完。所以这篇全是亲身踩过的坑,时间线、用过的项目、当时的心路全都尽量原样写出来。如果你是大学生在迷茫要不要转&nbsp;AI,或者已经在转的路上,希望能给点参考。&nbsp;一个反共识的开场:你以为进&nbsp;OpenAI&nbsp;的人都是博士?&nbsp;先讲个故事,跟我没关系,但跟所有想转&nbsp;AI&nbsp;的人都有关系。&nbsp;OpenAI&nbsp;的&nbsp;Sora&nbsp;团队(就是搞文生视频那个)一共&nbsp;13&nbsp;个人。这里面有两个人特别有意思:&nbsp;Will&nbsp;DePue,密歇根大学计算机系,直接辍学了。17...
_hengheng:我也本,也算是做ai相关,我最开始感觉做ai工程师有多么多么困难,后来发现懂了原理后整体训练完全可以看成一个流程化的内容,开源方案太多了,大多基本都是按着模子在自家业务上做各种操作,就算是大厂的小部门也没那么多资源去训基模,反而更多的是像怎么把技术往业务方向靠近了,不过当前时代如果本科学历没那么好加上自己执行力不是特别强还真不建议走ai工程师这条路,可以试试其他ai的偏业务方向,不然校招不太好杀出来
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务