資料結構與演算法(33)——字串習題
阿新 • • 發佈:2019-01-26
題目:反轉字串
/**
* 方法一:通過字元陣列反轉
* @param string
* @return
*/
public static String reversingString1(String string) {
// 字串開始索引
int start = 0;
// 字串結束索引
int end = string.length() - 1;
// 將字串轉換成字元陣列
char[] str = string.toCharArray();
// 宣告臨時變數
char temp;
// 字元交換
for (start = 0 ; start <= end / 2; start++) {
temp = str[start];
str[start] = str[end - start];
str[end - start] = temp;
}
// 生成字元創
return new String(str);
}
/**
* 方法二:字串反轉
* @param string
* @return
*/
public static String reversingString2(String string) {
// 獲取字串長度
int length = string.length() - 1;
StringBuilder sb = new StringBuilder();
for (int i = length; i >= 0; i--) {
sb.append(string.charAt(i));
}
return sb.toString();
}
/**
* 方法三:使用XOR邏輯運算實現字串反轉
* @param string
* @return
*/
public static String reversingString3(String string) {
// 字串開始索引
int start = 0;
// 字串結束索引
int end = string.length() - 1;
// 將字串轉換成字元陣列
char[] str = string.toCharArray();
while (start < end) {
str[start] ^= str[end];
str[end] ^= str[start];
str[start] ^= str[end];
start++;
end--;
}
return new String(str);
}
題目:反轉給定句子中單詞
例如 輸入:”This is a Boy”, 輸出:”Boy a is This”
public static String reversingSentence(String string) {
StringTokenizer st = new StringTokenizer(string);
String result = "";
while (st.hasMoreTokens()) {
result = st.nextToken() + " " + result;
}
return result;
}
題目:刪除給定字串中相同的相鄰字元
例如:ABCCBCBA –> ABBCBA –> ACBA
思路:
檢查字串中是否存在相同的相鄰字元對。如果存在,則刪除字元對。然後檢查下一個和前一個字元。
持續該過程直到字串串首或串尾或找不到相同的相鄰字元對為止。
public static void removeAdjacentPairs(String string) {
// 字串長度
int length = string.length();
// 將字串轉換成字元陣列
char[] str = string.toCharArray();
// 初始化索引變數
int j = 0;
for (int i = 1; i < length; i++) {
// 刪除相同的相鄰字元對
while ((str[i] == str[j]) && (j >= 0)) {
i++;
j--;
}
str[++j] = str[i];
}
// 輸出結果
for (int i = 0; i <= j; i++) {
System.out.print(str[i] + " ");
}
}