翻转字符串里的单词---JAVA记录

给定一个字符串,逐个翻转字符串中的每个单词。
在这里插入图片描述

说明:

无空格字符构成一个单词。
输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。

进阶:

请选用 C 语言的用户尝试使用 O(1) 额外空间复杂度的原地解法。

自己写的有些复杂,没有优化。先首尾空字符去掉,然后整个字符串反转,再对每个字符串反转。


    public class Main {
    	 public static String reverseWords(String s) {
    		 	if(s.equals("")||s.equals(" "))return "";
    	        StringBuffer str = new StringBuffer(s);
    	         
    	        int a = 0;
    	        //若第一个字符串为空字符串,删除。
    	        while(str.charAt(a) == ' ' && str.length() > 0 ) {
    	     
    	        	str.deleteCharAt(a);
    	        	if(str.length() == 0) return "";  //删到长度为0的时候返回
    	        	 
    	        }
    	        //对字符串后面的空字符进行删除
    	        int b = str.length()-1;
    	         
    	        while(str.charAt(b) == ' ' &&  b > 0  ) {
    	         
    	        	str.deleteCharAt(b);
    	        	b=str.length()-1; //每次都对最后一个位子进行判断
    	 
    	        }
         		//整个字符串反转
    	        for( int i=0,j=str.length()-1;i < j ; i++,j--) {
    	        	char c = str.charAt(i);
    	        	 
    	        	str.setCharAt(i,str.charAt(j) );
    	        	str.setCharAt(j,c);
    	        }
    	        //对字符串中 出现多个空字符串的地方进行删除,只保留一个
    	        for(int i=0;i<str.length()-2;) {
    	         	//连续两个为空字符,删去本位子的字符
    	        	if(str.charAt(i) == ' '&& str.charAt(i+1)==' ')
    	        	{
    	        		str.deleteCharAt(i);
    	        		continue; 
    	        	}
    	        	//当出现不是空字符串的时候 位子+1
    	        	i++;
    	        }
    	    	//对内部每个字符串进行反转。
    	        int l = 0; //记录内部字符串长度
    	        for(int i=0;i<str.length();i++) {
    	        	 
    	        	if(str.charAt(i) != ' ') {  //一个内部字符串长度
    	        		l++;
    	        		 
    	        	}else {
    	        		 //内部字符串长度大于1 则进行反转。
    	        		if(l>1) {
    	        		//对相应位子进行置换
    	        			for(int j= i-l,k=i-1; j<k;j++,k--) {
    	        				
    	    	        		char c = str.charAt(j);
    	    	   	        	str.setCharAt(j,str.charAt(k) );
    	    	   	        	str.setCharAt(k,c);
    	    	        		}
    	        		}
    	        		 //操作完一个内部字符串 则长度置为0
    	        		l = 0;
    	        	}
    	        	  
    	        }
    	        //上面代码对 if(str.charAt(i) != ' ')  else时候对上一个内部字符串操作,因此最后一个内部串没有操作,所以对最后一个内部字符串置换。
    	        for(int i=str.length()-l,j=str.length()-1;i<j;i++,j--) {
    	        	char c = str.charAt(i);
       	        	str.setCharAt(i,str.charAt(j) );
       	        	str.setCharAt(j,c);
    	        }
    	        
    	        System.out.print(str.toString());
    	        return str.toString();	
    }
    	 
    	public static void main(String[] args) {
    		reverseWords("123 123");
    	 	}
    
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值