关于翻转字符串和翻转字符串里的单词详解

//关于反转字符串的翻转
class Solution { public void reverseString(char[] s) { char a;
int b =s.length-1;//定义双指针 int i=0; while(i<b) {//在这里不使用for循环是因为中间的两位可能会多一次调换
//进行双指针的调换 a = s[b]; s[b]=s[i]; s[i] = a; i++; b--; } } }

//自己手写的调换代码
import java.util.Arrays; class Solution { public String reverseWords(String s) { String a;
int i = 0; StringBuffer str2 = new StringBuffer();
// s = s.replaceAll("\\s{1,}", " ");(查看资料知道) String[] arr = s.split(" ");//通过“ ”将string中每个单词转换为数组的一个项,但会将“ ”删除 int b =arr.length-1;
//调换代码则与字符串翻转代码调换步骤一致
while(i<b) {
a = arr[b];
arr[b]=arr[i];
arr[i] = a;
i++;
b--;
}
for(String n : arr) { str2.append(n); str2.append(" ");//由于之前删掉“ ”则在每个单词后面加上“ ” } return str2.toString().trim();//将头尾的“ ”删除 } }
但由于需实现将单词间多余的括号删除,此代码则无法实现。
所以查询资料可知在一开始便需要将字符串中多的括号删除则在一开始便加上
s = s.replaceAll("\\s{1,}", " ");
之后查看答案知道可以使用JAVA已封装方法的实现方法
import java.util.Arrays; class Solution { public String reverseWords(String s) { // 除去开头和末尾的空白字符 s = s.trim(); // 正则匹配连续的空白字符作为分隔符分割 List<String> wordList = Arrays.asList(s.split("\\s+")); Collections.reverse(wordList); return String.join(" ", wordList); } }
第三个问题反转字符串中的单词
这个题是将字符串中每个单词的字符顺序。

import java.util.Arrays; class Solution { public String reverseWords(String s) { int l = s.length(); int i = 0; StringBuffer str2 = new StringBuffer(); while(i<l){ int start = i; while(i<l && s.charAt(i) !=' '){ i++; } for(int p = start;p<i;p++){ str2.append(s.charAt(start+i-1-p)); } while(i<l && s.charAt(i) ==' '){ i++; str2.append(' '); } } return str2.toString().trim(); } }
整体思想是以空格为区分,设置start为起点指针。倒序通过start+i-1-p来实现,首尾相加减去自增量就是指针倒序移动。

浙公网安备 33010602011771号