【算法 day08】LeetCode 151.翻转字符串里的单词 |卡码网:55.右旋转字符串
151.翻转字符串里的单词
题目链接 | 文档讲解 |视频讲解 : 链接
1.思路:
-
1.去除字符串头尾的空格 ,使用库函数 trim()
-
2.对字符串进行分割,使用库函数split()
-
3.创建StringBuilder sb,遍历集合,中间是空格不处理,非空格sb拼接单词后,添加空格,最后一次遍历不需要添加空格
-
4.返回字符串
2.代码:
public static String reverseWords(String s) {//去除字符串开头和结尾的空格String s2 = s.trim();//进行字符串分割String[] s1 = s2.split(" ");StringBuilder sb= new StringBuilder();for (int i = s1.length - 1; i >= 0; i--) {//中间是空格的不做处理if(s1[i].equals("")){continue;}//非空格元素追加sb.append(s1[i]);//中间单词之间需要空格,最后一个元素后面不需要加空格,只有if (i != 0) {sb.append(" ");}}return sb.toString();}
还有一种老师的思路还没有缕清楚,周末补充~~
卡码网:55.右旋转字符串
题目链接 | 文档讲解 |视频讲解:链接
1.思路:
-
1.先将整个字符串反转
-
2.反转前k个字符
-
3.反转k后面的字符串
2.代码:
public static String rightReverseWords(String s,int k) {char[] charArray = s.toCharArray();//1反转整个字符串 双指针reverse(charArray,0,s.length()-1);//2.反转前半段reverse(charArray,0,k-1);//3.反转后半段reverse(charArray,k,s.length()-1);return new String(charArray);}public static void reverse(char [] a,int left,int right){while (left<right){char temp=a[left];a[left]=a[right];a[right]=temp;left++;right--;}}
1.思路:
-
使用现有的方法,字符串中substring方法,区间范围是左闭右开
2.代码:
public static String rightReverseWords2(String s,int k) {//subString 左闭右开String start = s.substring(s.length() -k, s.length() );System.out.println(start);String end = s.substring(0,s.length() -k );System.out.println(end);return start+end;}