zoukankan      html  css  js  c++  java
  • 《程序员面试金典》部分题解

    1.1

     1 import java.util.Scanner;
     2 public class Main 
     3 {
     4     //此方法时间复杂度为O(n) 空间复杂度为O(1)
     5     public static boolean isUniqueChar2(String str)
     6     {
     7         //若字符串长度大于字母表中字符个数,则必有重复
     8         if(str.length()>256)    return false;
     9         boolean[] char_set = new boolean[256];    //默认都是false
    10         for(int i=0; i<str.length(); i++)
    11         {
    12             int val = str.charAt(i);
    13             //若这个字符已出现过,则返回false
    14             if(char_set[val])    return false;
    15             char_set[val] = true;
    16         }
    17         return true;
    18     }
    19     public static void main(String[] args) {
    20         String str;
    21         Scanner sca = new Scanner(System.in);
    22         //多组输入,输入#结束
    23         while(true)
    24         {
    25             str = sca.nextLine();
    26             if(str.equals("#"))    return;
    27             boolean res = isUniqueChar2(str);
    28             System.out.println(res);
    29         }
    30     }
    31 }

    1.2

    #include <iostream>
    #include <cstring>
    using namespace std;
    void reverse(char* str)
    {
      char* end = str;
      char tmp;
      //找出字符串末尾
      while(*end)
      {
        end++;
      }
      end--;//会退到null前的一个字符
      while(str < end)
      {
        tmp = *str;
        *str = *end;
        *end = tmp;
        str++;
        end--;
      }
    }
    int main()
    {
        char s[100];
        cin>>s;
        reverse(s);
        cout<<s;
        return 0;
    }

    1.3

    import java.util.Arrays;
    import java.util.Scanner;
    
    public class SortC {
        public static String sort(String s)
        {
            char[] con = s.toCharArray();
            Arrays.sort(con);
            return new String(con);
        }
        public static boolean permutation(String s, String t)
        {
            if(s.length() != t.length())    return false;
            return sort(s).equals(sort(t));
        }
        public static void main(String[] args) {
            String s, t;
            Scanner sca = new Scanner(System.in);
            while(true)
            {
                s = sca.nextLine();
                if(s.equals("#"))
                    return;
                t = sca.nextLine();
                System.out.println(permutation(s, t));
            }
        }
    
    }

    1.4

    这题主要是一开始开的数组要足够大,不然会有数组越界的错误。

     1 public class Main {
     2     public static void main(String[] args) {
     3         String string = "Mr John Smith "; 
     4         char[] s = new char[100];
     5         int length = string.length();
     6         for(int i=0; i<length; i++){
     7             s[i] = string.charAt(i);
     8         }
     9         for (int i=length-1; i>=0; i--) {
    10             if(s[i] == ' ')    length--;
    11             else     break;
    12         }
    13         repSpace(s, length);
    14         System.out.println(s);
    15     }
    16     public static void repSpace(char[] s, int length) {
    17         int spaceNum=0, newLength;
    18         for(int i=0; i<length; i++){
    19             if(s[i] == ' ') spaceNum++;
    20         }
    21         newLength = length + spaceNum*2;
    22         s[newLength] = '';
    23         int j = newLength - 1;
    24         for(int i=length-1; i>=0; i--){
    25             if(s[i]!=' ')
    26                 s[j--] = s[i];    
    27             else {
    28                 s[j--]='0'; s[j--]='2'; s[j--]='%';
    29             }
    30         }
    31     }
    32 }

     1.5 这题主要是考察对StringBuffer的理解,在字符串拼接上比String效率高

     1 public class Main {
     2     public static void main(String[] args) {
     3         System.out.println(compressBad("aabcccccaaa"));
     4         System.out.println(compressBuffer("aabcccccaaa"));
     5     }
     6     //时间复杂度为O(str.length()+k^2)
     7     public static String compressBad(String str) {
     8         String mystr = "";
     9         char last_char = str.charAt(0);
    10         int count = 1;
    11         for(int i=1; i<str.length(); i++){
    12             if(str.charAt(i) == last_char)    count++;
    13             //如果这个字符与之前不同
    14             else {
    15                 //字符串拼接的时间杂度为O(n^2)
    16                 mystr+=(last_char+""+count);
    17                 last_char = str.charAt(i);
    18                 count=1;
    19             }
    20         }
    21         mystr+=(last_char+""+count);
    22         if(mystr.length()>=str.length())    return str;
    23         else    return mystr;
    24     }
    25     //利用StringBuffer来减少时间复杂度
    26     public static String compressBuffer(String str) {
    27         StringBuffer mystr = new StringBuffer();
    28         char last_char = str.charAt(0);
    29         int count = 1;
    30         for(int i=1; i<str.length(); i++){
    31             if(str.charAt(i) == last_char)    count++;
    32             //如果这个字符与之前不同
    33             else {
    34                 //字符串拼接会直接构建一个新串,因此时间杂度为O(n^2)
    35                 mystr.append(last_char);
    36                 mystr.append(count);
    37                 last_char = str.charAt(i);
    38                 count = 1;
    39             }
    40         }
    41         mystr.append(last_char);
    42         mystr.append(count);
    43         if(mystr.length()>=str.length())    return str;
    44         else    return mystr.toString();
    45     }
    46 }
  • 相关阅读:
    springboot springcloud zuul 过滤器
    springboot springcloud eureka 熔断器
    javaweb servlet filter
    maven nexus 搭建私服(二)
    springboot springcloud zuul 网关入门
    springboot springcloud 配置中心
    springboot springcloud eureka 入门
    java rabbitmq
    java jvm调优
    maven nexus 搭建私服(一)
  • 原文地址:https://www.cnblogs.com/mycd/p/5605017.html
Copyright © 2011-2022 走看看