[面試題]迴文字符串

預備知識:

  • 1java.lang.String.charAt()方法

返回 指定索引 處的 char值。索引範圍 是從0 到length() - 1。

源碼:

public char charAt(int index) {
        if ((index < 0) || (index >= value.length)) {
            throw new StringIndexOutOfBoundsException(index);
        }
        return value[index];
    }

參數index 這是該數的char值第一個char的索引爲0.。
如果index參數爲負或不小於該字符串的長度會報異常IndexOutOfBoundsException ,這是個越界異常

package se.SE.practice;
class CharAt{
    public static void main(String[] args) {
        String str="Say something I am giving up on you";
        System.out.println(str.charAt(0));
        System.out.println(str.charAt(1));
        System.out.println(str.charAt(16));
    }
}

輸出:

  • 2 toString()

a.當需要將一個對象輸出到顯示器時,通常要調用他的toString()方法,將對象的內容轉換爲字符串.java中的所有類默認都有一個toString()方法 

b.本身返回的是 getClass().getName() + "@" +Integer.toHexString(hashCode());也就是 類名 + @ +hashCode的值

注意事項:

1.必須被聲明爲public

2.返回類型爲String

3.方法的名稱必須爲toString,且無參數

4.方法體中不要使用輸出方法System.out.println()

1題目來源:

https://www.nowcoder.com/questionTerminal/9d1559511b3849deaa71b576fa7009dc

2題目描述:

迴文串”是一個正讀和反讀都一樣的字符串,比如“level”或者“noon”等等就是迴文串。花花非常喜歡這種擁有對稱美的迴文串,生日的時候她得到兩個禮物分別是字符串A和字符串B。現在她非常好奇有沒有辦法將字符串B插入字符串A使產生的字符串是一個迴文串。你接受花花的請求,幫助她尋找有多少種插入辦法可以使新串是一個迴文串。如果字符串B插入的位置不同就考慮爲不一樣的辦法。
例如:
A = “aba”,B = “b”。這裏有4種把B插入A的辦法:
* 在A的第一個字母之前: "baba" 不是迴文
* 在第一個字母‘a’之後: "abba" 是迴文
* 在字母‘b’之後: "abba" 是迴文
* 在第二個字母'a'之後 "abab" 不是迴文
所以滿足條件的答案爲2

3分析:

a.判斷迴文

只需要定義兩個引用,第一個引用從前向後遍歷,第二個引用從後向前遍歷,如果兩個遍歷的字符相等就是迴文字符串,否則就不是迴文字符串

  public static boolean isHuiwen(String s){
        int i=0;
        int j=s.length()-1;
        while (i<j){
            if(s.charAt(i)!=s.charAt(j)){
                return false;
            }
            i++;
            j--;
        }
        return true;
    }

b.插入迴文

在從第一個字符串的第一個字符開始遍歷,嘗試插入直到判斷迴文的方法返回true,此位置就是插入位置

  public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str1 = sc.nextLine();
        String str2 = sc.nextLine();
        int count = 0;
        for (int i = 0; i <= str1.length(); i++) {
            StringBuilder sb = new StringBuilder(str1);
            sb.insert(i, str2);
            if (isHuiwen(sb.toString())) {
                count++;
            }
        }
        System.out.println(count);
    }

完整代碼:

import java.util.*;
public class Main {
public static boolean isHuiwen(String s){
int i = 0;
int j = s.length()-1;
while(i<j){
if(s.charAt(i)!=s.charAt(j)){
return false;
}
i++;
j--;
}
return true;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str1 = sc.nextLine();
String str2 = sc.nextLine();
int count = 0;
for(int i = 0; i <= str1.length();i++){
StringBuilder sb = new StringBuilder(str1);
sb.insert(i, str2);
if(isHuiwen(sb.toString())){
count++;
}
}
System.out.println(count);
}

測試:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章