【Java面試題】如何判斷一個字符串中某個字符出現的次數?


1. 前言

最近面試了幾家公司,體驗了一下電話面試和今年剛火起來的視頻面試

雖然之前就有一些公司會先通過電話面試的形式先評估下候選人的能力水平,但好像不多,至少我以前的面試形式100%都是現場面試

面試過程中,不可避免的被問到了很多面試題,本篇博客就總結下面試過程中被問到的關於String的2道面試題,分別是:

  1. 如何判斷一個字符串中某個字符出現的次數?
  2. 如何反轉一個字符串?

其余的面試題,目前都已梳理出來,后續會以博客的形式進行分享。

2. 如何判斷一個字符串中某個字符出現的次數?

在直接問這個問題之前,面試官先問了我下面這個問題:

請說一下String常用的方法有哪些?

該問題其實是考察Java基礎,畢竟String類在平時的開發中使用非常廣泛,我當時主要說了以下方法:

  1. length
  2. equals
  3. trim
  4. substring
  5. concat
  6. indexOf
  7. lastIndexOf
  8. replace
  9. split
  10. toLowerCase
  11. toUpperCase

以上只是面試時我想到的一少部分方法,更多String的方法大家可在IDEA中查看源碼,畢竟太多了,如下所示:

在回答完上述問題后,面試官緊接着問了該問題:

如何判斷一個字符串中某個字符出現的次數?

聽到該問題,我腦海中第一反應是先把字符串轉換為字符數組,然后使用foreach循環,在循環體內進行字符比對,代碼如下所示:

public static void main(String[] args) {
    String str = "ABC123ABC";
    char searchChar = 'B';

    int count = 0;
    char[] charArray = str.toCharArray();
    for (char item : charArray) {
        if (item == searchChar) {
            count++;
        }
    }

    System.out.println("字符" + searchChar + "出現的次數為:" + count);
}

輸出結果如下所示:

字符B出現的次數為:2

但面試題肯定不會這么簡單,緊接着面試官增加了限制條件:

如果不能使用循環,只使用String自己的方法,如何實現呢?

實現方法有很多種,但我推薦使用replace()方法,很好理解,並且高效,代碼如下所示:

public static void main(String[] args) {
    String str = "ABC123ABC";
    String searchChar = "B";
    int count = 0;

    int origialLength = str.length();
    str = str.replace(searchChar, "");
    int newLength = str.length();

    count = origialLength - newLength;

    System.out.println("字符" + searchChar + "出現的次數為:" + count);
}

而且我覺得,關於面試題:如何判斷一個字符串中某個字符出現的次數?,上面這個實現方法才是面試官真正想聽到的答案。

3. 如何反轉一個字符串?

因為是電話面試,在面了1個小時,面試快結束的時候,面試官問了該問題:

怎么讓一個字符串反轉?說下思路即可

可能很多同學第一時間想到的思路是下面這樣的:

public static void main(String[] args) {
    String str = "ABC123ABC";

    StringBuilder stringBuilder = new StringBuilder(str);
    stringBuilder.reverse();

    String newStr = stringBuilder.toString();

    System.out.println("反轉前:" + str);
    System.out.println("反轉后:" + newStr);
}

但我覺得這肯定不是面試官問這個問題的意圖,所以我當時的回答是下面這樣的:

可以利用數據結構中的棧,因為棧的特點是先入后出(這里可以提一下和隊列的不同,隊列的特點是先入先出),先把字符串中的每個字符按順序入棧,再依次出棧,即可實現字符串的反轉。

即入棧順序是:A B C 1 2 3 A B C

而出棧順序是:C B A 3 2 1 C B A

轉換成Java代碼是下面這樣的:

public static void main(String[] args) {
    String str = "ABC123ABC";

    char[] charArray = str.toCharArray();
    Stack<Character> stack = new Stack<>();
    StringBuilder newStr = new StringBuilder();

    for (char item : charArray) {
        stack.push(item);
    }

    for (int i = 0; i < charArray.length; i++) {
        newStr.append(stack.pop());
    }

    System.out.println("反轉前:" + str);
    System.out.println("反轉后:" + newStr.toString());
}

輸出結果如下所示:

反轉前:ABC123ABC

反轉后:CBA321CBA


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM