算法刷题-Day04
1. 反转字符串
题目描述
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
输入示例
输入:s = ["h","e","l","l","o"]
输出:["o","l","l","e","h"]
思路讲解和代码实现
package com.why.day04;
/**
* @ClassName:ReverseString
* @Description:todo 反转字符串
* @Author: why
* @DateTime:2021/11/1 15:09
*/
public class ReverseString {
/**
* 反转字符串
*
* 思路:
* 1. 创建left指针指向数组第一个元素
* 2. 创建right指针指向数组最后一个元素
* 3. 交换left和right指针指向的元素
* 4. left ++, right --
* 5. 重复上述步骤,知道left >= right停止
* @param s
*/
public void reverseString(char[] s) {
int left = 0;
int right = s.length - 1;
while (left < right){
char temp = s[left];
s[left] = s[right];
s[right] = temp;
left ++;
right --;
}
}
}
2. 反转字符串中的单词
题目描述
给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
输入示例
输入:"Let's take LeetCode contest"
输出:"s'teL ekat edoCteeL tsetnoc"
思路讲解和代码实现
package com.why.day04;
/**
* @ClassName:ReverseWord
* @Description:todo 反转字符串中的单词
* @Author: why
* @DateTime:2021/11/1 15:15
*/
public class ReverseWord {
public static void main(String[] args) {
ReverseWord reverseWord = new ReverseWord();
String string = reverseWord.reverseString("hello".toCharArray());
System.out.println(string);
}
/**
* 反转字符串中的单词
*
* 思路:
* 1. 数据校验非空
* 2. 将每个单词根据空格截取成字符串数组
* 3. 使用反转字符串对每个单词进行反转
* 4. 拼接字符串
* @param s
* @return
*/
public String reverseWords(String s) {
if (s == null || s.equals("")) return null;
String[] str = s.split(" ");
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < str.length; i++) {
String string = reverseString(str[i].toCharArray());
if (i == str.length-1)
stringBuilder.append(string);
else
stringBuilder.append(string+" ");
}
return stringBuilder.toString();
}
/**
* 反转字符串
*
* 思路:
* 1. 创建left指针指向数组第一个元素
* 2. 创建right指针指向数组最后一个元素
* 3. 交换left和right指针指向的元素
* 4. left ++, right --
* 5. 重复上述步骤,知道left >= right停止
* @param s
*/
public String reverseString(char[] s) {
int left = 0;
int right = s.length - 1;
while (left < right){
char temp = s[left];
s[left] = s[right];
s[right] = temp;
left ++;
right --;
}
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < s.length; i++) {
stringBuilder.append(s[i]);
}
return stringBuilder.toString();
}
}