其他分享
首页 > 其他分享> > ECNU 48 奇怪的字符串排序

ECNU 48 奇怪的字符串排序

作者:互联网

ECNU 48 奇怪的字符串排序

链接

https://acm.ecnu.edu.cn/problem/48

题目

单点时限: 1.0 sec

内存限制: 256 MB

定义函数 Sort,对一个字符串数组的元素按照字符串的首字符的升序进行排序。首字符相同的字符串按照字符串本身的字典序降序进行排序。

字符串中只会出现小写英文字母。

include <stdio.h>

void sort(char (p)[81], int n)
/
PreCondition:
p 指向一个二维字符数组,n 是范围为 2-100 的数组元素个数
PostCondition:
按要求对数组进行排序
*/
{

}

int main() {
char s[100][81];
int n, i;
scanf("%d", &n);
for (i = 0; i < n; i++) scanf("%s", s[i]);
sort(s, n);
for (i = 0; i < n; i++) printf("%s\n", s[i]);
return 0;
}

样例
input
24
alpha
beta
gamma
delta
epsilon
zeta
eta
theta
iota
kappa
lambda
mu
nu
xi
omicron
pi
rho
sigma
tau
upsilon
phi
chi
psi
omega
output
alpha
beta
chi
delta
eta
epsilon
gamma
iota
kappa
lambda
mu
nu
omicron
omega
psi
pi
phi
rho
sigma
theta
tau
upsilon
xi
zeta

思路

还是比较,这里就有点坑,第一位要升序排序,之后才用字典序排序,所以不如重写比较器,先跑第一位用if,之后用else来跑剩下的位数。
考虑到效率,用了stringbuffer,但是时间应该够的,所以优不优化无所谓。

代码

  public static void fun() {
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    String[] str = new String[n];
    for (int i = 0; i < n; i++) {
      str[i] = sc.next();

    }
    Arrays.sort(str, new Comparator<String>() {
      @Override
      public int compare(String o1, String o2) {
        if (o1.charAt(0) != o2.charAt(0)) {
          return o1.charAt(0) - o2.charAt(0);
        } else {
          StringBuffer sb1 = new StringBuffer(o1);
          StringBuffer sb2 = new StringBuffer(o2);
          for (int i = 1; i < Math.min(sb1.length(), sb2.length()); i++) {
            if (sb1.charAt(i) != sb2.charAt(i)) {
              return sb2.charAt(i) - sb1.charAt(i);
            }
          }
          return sb2.length() - sb1.length();
        }
      }
    });
    for (int i = 0; i < n; i++) {
      System.out.println(str[i]);
    }
  }

标签:sb2,charAt,48,int,ECNU,字符串,new,排序
来源: https://www.cnblogs.com/blogxjc/p/14314816.html