算法打卡Day09 | 字符串篇-反转字符串中的单词、右旋字符串

66 阅读1分钟

151. 反转字符串中的单词

题目链接:leetcode.cn/problems/re…

关键点:先全部反转,再部分反转

class Solution {
    public String reverseWords(String s) {
        //去掉前后空格和中间多余的空格
        StringBuilder sb = removeBlank(s);
        //全部反转
        reversePart(sb, 0, sb.length()-1);
        //各个单词反转
        reverseEvery(sb);
        return sb.toString();
    }
​
    private StringBuilder removeBlank(String s){
        int start = 0;
        int end = s.length()-1;
        while(s.charAt(start)==' ') start++;
        while(s.charAt(end)==' ') end--;
        StringBuilder sb = new StringBuilder();
        while(start <= end){
            char c = s.charAt(start);
            if(c!=' ' || sb.charAt(sb.length()-1)!=' '){
                sb.append(c);
            }
            start++;
        }
        return sb;
    }
​
    public void reversePart(StringBuilder sb, int start, int end){
        while(start < end){
            char temp = sb.charAt(start);
            sb.setCharAt(start, sb.charAt(end));
            sb.setCharAt(end, temp);
            start++;
            end--;
        }
    }
​
    
    public void reverseEvery(StringBuilder sb){
        //定义快慢指针,
        //快慢指针找空格相隔的部分
        int slow = 0;
        int fast = 1;
        while(fast<sb.length()){
            while(fast<sb.length() && sb.charAt(fast)!=' '){
                fast++;
            }
            reversePart(sb, slow, fast-1);
            slow = fast + 1;
            fast = slow + 1;
        }
    }
​
}

55. 右旋字符串

题目链接:kamacoder.com/problempage…

文章给的思路是先整体反转,在针对n和length-n进行反转。但Java中本身String就是不可变的,还是得要定义变量,所以我直接使用StringBuilder,先遍历n,再遍历length-n

  • 代码
import java.util.*;
​
class Main{
    public static void  main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n = Integer.parseInt(sc.nextLine());
        String str = sc.nextLine();
        StringBuilder sb = new StringBuilder();
        int len = str.length();
        for(int i=len-n; i<len; i++){
            sb.append(str.charAt(i));
        }
        for(int i=0; i<len-n; i++){
            sb.append(str.charAt(i));
        }
        System.out.println(sb.toString());
    }
}
  • 运行结果

image-20240919231155584

ps:KMP算法没看