反转字符串中单词
class Solution {
public void reverseWord(StringBuilder sb,int l,int r){
while(l<r){
char tmp=sb.charAt(l);
sb.setCharAt(l,sb.charAt(r));
sb.setCharAt(r,tmp);
l++;
r--;
}
}
public String reverseWords(String s) {
StringBuilder sb=new StringBuilder();
int l=0,r=s.length()-1;
while(l<=r&&s.charAt(l)==' ')l++;
while(l<=r&&s.charAt(r)==' ')r--;
while(l<=r){
char c=s.charAt(l);
if(c!=' '){
sb.append(c);
}else if(sb.charAt(sb.length()-1)!=' '){
sb.append(c);
}
l++;
}
int n=sb.length()-1;
reverseWord(sb,0,n);
int start=0,end=0;
while(start<=n){
while(end<=n&&sb.charAt(end)!=' ')end++;
reverseWord(sb,start,end-1);
start=end+1;
end++;
}
return sb.toString();
}
}
右旋字符串
import java.util.*;
public class Main{
public static void reverse(StringBuilder sb, int l,int r){
while(l<r){
char tmp=sb.charAt(l);
sb.setCharAt(l,sb.charAt(r));
sb.setCharAt(r,tmp);
l++;
r--;
}
}
public static void main(String args[]){
Scanner in=new Scanner(System.in);
int k=Integer.parseInt(in.nextLine());
String s=in.nextLine();
StringBuilder sb=new StringBuilder(s);
reverse(sb,0,s.length()-1);
reverse(sb,0,k-1);
reverse(sb,k,s.length()-1);
System.out.println(sb);
}
}
字符串总结
在java这里因为string本身的性质问题,对于字符串的改动需要用到StringBuilder和StringBuffer,要主要他们之间类型的转换
双指针
在数组中,双指针方法通过两个指针在一个for循环下完成两个for循环的工作,降低时间复杂度。
在链表中,经常使用快慢指针解决问题