151. 反转字符串中的单词

发布时间 2023-11-17 09:04:57作者: 追梦•少年

2023-11-17

思路:

  调用库函数+利用正则表达式

  利用栈 双端队列 头插链表

  利用数组 总长度不知道 按最大长度10^4

  利用list

进阶:字符串可变时,Java不行,双指针,先整体反转,再逐个反转单词 可以将空间复杂度降低

 

数组:

class Solution {
    public String reverseWords(String s) {
 
        //调用库函数+利用正则表达式      
        //利用栈          双端队列       头插链表
        //利用数组       总长度不知道  按最大长度10^4
 
        //进阶:Java不行,双指针,先整体反转,再逐个反转单词
 
        //数组
 
        String[]  ss=new String[100*100]; 
        int j=0;
 
        int i=0;
        while(i<s.length()){
            char c=s.charAt(i);
            if(c==' '){
                i++;
                continue;
            }
            String temp="";
            while(i<s.length() && s.charAt(i)!=' '){
               temp+=s.charAt(i);
               i++;
            }
            if(!temp.equals("")){//没有这个判断好像也不影响
                ss[j]=temp;
                 j++;
            }
        }
 
        String res="";
 
        for(j=j-1;j>=0;j--){
            res+=ss[j];
            res+=" ";
        }
        
        res=res.substring(0,res.length()-1);
 
        return res;
        
        
    }
}

list:

class Solution {
    public String reverseWords(String s) {
        //栈 利用栈  很好想,很好写
 
        String newS="";
 
        List<String>  ls=new ArrayList<>();
 
        for(int i=0;i<s.length();i++){
            char c=s.charAt(i);
            String cc=c+"";
            String temp="";
            if(cc.equals(" ")){
                continue;
            }
 
            while(i<s.length()-1 && !(cc.equals(" "))){
                temp+=cc;
                i++;
                c=s.charAt(i);
                cc=c+"";
            }
 
            if(i==s.length()-1){
                c=s.charAt(i);
                cc=c+"";
                if(!cc.equals(" ")){
                    temp+=cc;
                }
            }
 
 
            ls.add(temp);
 
        }
 
        ListIterator<String> it = ls.listIterator();
 
        while (it.hasNext()) {
            it.next();
        }
 
        while(it.hasPrevious()){
            newS+=it.previous();
            newS+=" ";
        }
        newS=newS.substring(0,newS.length()-1);
 
        return newS;
    }
}

调用库函数+正则表达式:

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);
 
    }
}

栈,双端队列,头插链表没写

。。。。。