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); } }
栈,双端队列,头插链表没写
。。。。。