zoukankan      html  css  js  c++  java
  • 字典序,求给定字符串的下一个

    POJ 1146 ID Codes 

    给定字符串有26个小写字母组成,求出给定字符串的下一个。

    算法简述:

    对于字符数组chararray,从字符串末尾向前找到第一个chararray[index]<chararray[index-1],然后找到index之后的字符中最后一个大于chararray[index-1],记为position,小于chararray[index]的字符。然后交换chararray[index-1]和chararray[position]。对index及其以后的字符从小到大排序即可。

    代码:

    import java.util.Scanner;

    public class Main {

    public static void next(String str)
    {
    char[] chararray = str.toCharArray();
    int length=str.length();
    int count=length-1,i=0;
    while(count>0)
    {
    if(chararray[count]>chararray[count-1])
    {
    break;
    }
    count--;
    }
    if(count==0)
    {
    System.out.println("No Successor");
    return;
    }
    int midindex=count;
    int leftindex=count;
    for(i=midindex;i<length;i++)
    {
    if((chararray[i]>chararray[midindex-1])&&(chararray[i]<chararray[midindex]))
    {
    leftindex=i;
    }
    }
    char node = chararray[leftindex];
    chararray[leftindex]=chararray[midindex-1];
    chararray[midindex-1]=node;
    int minindex=0;
    for(i=count;i<length-1;i++)
    {
    minindex=i;
    for(int j=i+1;j<length;j++)
    {
    if(chararray[j]<chararray[minindex])
    {
    minindex=j;
    }
    }
    if(minindex!=i)
    {
    node = chararray[minindex];
    chararray[minindex]=chararray[i];
    chararray[i]=node;
    }
    }
    str = new String(chararray);
    System.out.println(str);
    }
    public static void main(String[] arg0)
    {
    @SuppressWarnings("resource")
    Scanner sc1 = new Scanner(System.in);
    while(true)
    {
    String str = sc1.nextLine();
    if(str!=null&&str.equalsIgnoreCase("#"))
    {
    break;
    }
    next(str);
    }
    }
    }

  • 相关阅读:
    javascript学习笔记
    c++输入文件流ifstream用法详解
    如何退出while(cin >> s)
    【赵渝强老师】利用Python完成数据分布特征的分析
    PG 的 AWR pg_profile
    java构建树形结构
    docker安装mongodb 数据备份和还原
    通过经纬度计算不同模型图瓦片坐标
    linux常用命令
    docker 常用命令
  • 原文地址:https://www.cnblogs.com/earendil/p/4194375.html
Copyright © 2011-2022 走看看