• 微软笔试题,luckstring


    解析:这题主要在于字典排序和重复判断,其实只要使用TreeSet这个能排序的SET集合类就可以轻松解决了

     1 import java.util.Scanner;
     2 import java.util.TreeSet;
     3 import java.util.ArrayList;
     4  
     5 public class Main{
     6      
     7     public static void main(String[] args){
     8         //扫描获取字符串
     9         Scanner s = new Scanner(System.in);
    10          
    11         String line = s.nextLine();
    12          
    13         s.close();
    14         //用来生成指定长度的斐波那契数组,
    15         //因为一个字符串中不同的字符最多有26个,先求出所有小于26的斐波那契数,和大于26的第一个数
    16         ArrayList<Integer> al = initArr(26);
    17         //用来存放子字符串,用SET可以防止重复,TreeSet可以自动按字典顺序排序 
    18         TreeSet<String> ts = new TreeSet<String>();
    19         //i和j表示子字符串在原字串中的起止位置(包括i,不包括j),循环遍历所有子串 
    20         for(int i = 0;i < line.length() - 1;i++)
    21             for(int j = i + 1;j <= line.length();j++){
    22                 String subStr = line.substring(i, j);
    23                 //判断字串中不同字符的个数是否是斐波那契数
    24                 if(al.contains(getDifNum(subStr)))
    25                     //加进SET
    26                     ts.add(subStr);
    27             }
    28         //循环打印 
    29         for(String str : ts){
    30             System.out.println(str);
    31         }
    32     }
    33     //获得子字串中不同字符个数 
    34     public static int getDifNum(String subStr){
    35         TreeSet<Character> tmps = new TreeSet<Character>();
    36          
    37         char[] carr = subStr.toCharArray();
    38         //将所有字符加入SET,因为SET不会重复,所以最后的SET大小就是不同字符的个数 
    39         for(Character a : carr){
    40             tmps.add(a);
    41         }
    42         return tmps.size();
    43     }
    44     //运用迭代进行斐波那契数组的生成 
    45     public static ArrayList<Integer> initArr(int n){
    46         ArrayList<Integer> al = new ArrayList<Integer>();
    47          
    48         al.add(1);
    49         al.add(1);
    50          
    51         int p = 0;
    52         int q = 1;
    53          
    54         while(true){
    55             al.add(al.get(p) + al.get(q));
    56             p = q;
    57             q = al.size() - 1;
    58             if(q >= 26)
    59                 break;
    60         }
    61          
    62         return al;
    63          
    64     }
    65 }
  • 相关阅读:
    Java中的日期(Calendar、Date)
    java上传、下载、删除ftp文件
    JAVA中使用FTPClient实现文件上传下载
    使用JSch实现SFTP文件传输
    linux 如何显示一个文件的某几行(中间几行)
    java常用流处理工具StreamTool 常见的InputStream流转字符串, 转字节数组等等
    String与InputStream互转的几种方法
    day 13
    day 12
    day11 大纲
  • 原文地址:https://www.cnblogs.com/njupt-Qsimple/p/5893972.html
Copyright © 2020-2023  润新知