面試題之單詞倒序

要求將以下字符串

String str = "student a am I";

轉爲

"I am a student"

實現代碼

public class Main {

	public static void main(String[] args) {
		String str = "student a am I";
		System.out.println(reverseStringSequence(str));
	}

	public static String reverseStringSequence(String str) {
		char[] seq = str.toCharArray();
		int length = seq.length;
		// 定義兩個指針記錄要反轉單詞的起始位置
		int start = 0;
		int end = 0;
		// 這裏一定要含有等於,因爲要判斷是否是最後一個單詞,從而可以處理最後一個單詞
		while (end <= length) {
			// 當已經遍歷到字符串的最後一個字符,或者當前字符是空格時
			// 則對空格前的單詞進行反轉,即"am"反轉爲"ma"
			// 一定要把判斷是否是結尾放在前面,否則seq[end]會報錯,因爲數組的有效索引是從0開始的
			// 反轉後修改單詞的起始指針爲空格的下一個字符
			// 如果不符合條件,則移動指針繼續判斷下一個字符
			if (end == length || seq[end] == ' ') {
				reverse(seq, start, end - 1);
				start = end + 1;
			}
			end++;
		}
		// 反轉這個數組
		reverse(seq, 0, length - 1);
		return new String(seq);
	}

	private static void reverse(char[] seq, int start, int end) {
		while (start < end) {
			char temp = seq[start];
			seq[start] = seq[end];
			seq[end] = temp;
			start++;
			end--;
		}
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章