0
点赞
收藏
分享

微信扫一扫

刷题之反转字符串中的单词 III

白衣蓝剑冰魄 2022-01-07 阅读 29

给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。

示例:

输入:"Let's take LeetCode contest"
输出:"s'teL ekat edoCteeL tsetnoc"

首先附上自己的愚蠢办法,先把它化为字符数组,然后遍历寻找空格,并设置一个标记符,如果没有空格则全部翻转,如果有大于一个空格的出现就分开翻转,用一个标记索引记录每个单词起始位置,遍历到空格前,这一段进行翻转。代码如下:

class Solution {
    public String reverseWords(String s) {
        char[] a=s.toCharArray();
        int j=0,q=a.length-1,flag=0;
        for(int i = 0;i<a.length-1;i++){
            if(a[i+1]==' '){
                flag++;
                reverse(a,j,i);
                j=i+2;
            } 
        }
        for(int w = a.length-1;w>0;w--){
             if(a[w-1]==' '){
                reverse(a,w,q);
                break;
            }
        }
        if(flag==0){
            reverse(a,0,q);
        }
        return String.valueOf(a);
    }
    public void reverse(char[] s,int left,int right){
        char tmp;
        while(left<right){
             tmp=s[left];
            s[left]=s[right];
            s[right]=tmp;
            left++;
            right--;
        }
       
    }
}

因为我对于java基础已经好久没有系统复习过,所以对字符串的应用几乎忘记了,看到大佬们的解题,豁然开朗,并且说明我应该去复习以下java基础了。

使用字符串操作,大概是先根据空格将其分割为字符串数组,字符串数组中每个元素使用翻转函数,并且append到StringBuilder中返回即可,代码如下:

 public  static String reverseWords(String s) {
        StringBuilder sb = new StringBuilder();
        StringBuilder sb1 = new StringBuilder();
        String[] split = s.split(" ");
        for (String s1 : split) {
            sb1.append(s1).reverse();
            sb.append(sb1.toString());
            sb.append(" ");
            sb1.delete( 0, sb.length());
        }
        return sb.toString().trim();
    }

任重道远!

举报

相关推荐

0 条评论