151. 反转字符串中的单词
思路:java中用trim()去除字符串前后的空格,用正则表达式"\\s+"切割数组,因为可能有一个或者多个空格,反转之后用String.join(" ",partArr)在两两元素之间插入空格连接为字符串
class Solution {
public String reverseWords(String s) {
s=s.trim();
String[] partArr = s.split("\\s+");
int l=0,r=partArr.length-1;
while(l<r){
String temp = partArr[l];
partArr[l]=partArr[r];
partArr[r]=temp;
l++;
r--;
}
return String.join(" ",partArr);
}
}
55. 右旋字符串
思路:先整体反转字符串,然后把前后两个区间的字符串反转,就得到了右旋字符串。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = Integer.parseInt(in.nextLine());
String s = in.nextLine();
int len = s.length(); //获取字符串长度
char[] chars = s.toCharArray();
reverseString(chars, 0, len - 1); //反转整个字符串
reverseString(chars, 0, n - 1); //反转前一段字符串,此时的字符串首尾尾是0,n - 1
reverseString(chars, n, len - 1); //反转后一段字符串,此时的字符串首尾尾是n,len - 1
System.out.println(chars);
}
public static void reverseString(char[] ch, int start, int end) {
//异或法反转字符串,参照题目 344.反转字符串的解释
while (start < end) {
ch[start] ^= ch[end];
ch[end] ^= ch[start];
ch[start] ^= ch[end];
start++;
end--;
}
}
}