前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >翻转字符串

翻转字符串

作者头像
一份执着✘
发布2018-06-04 16:17:02
5520
发布2018-06-04 16:17:02
举报
文章被收录于专栏:赵俊的Java专栏赵俊的Java专栏

题意

给定一个字符串,逐个翻转字符串中的每个单词。

  • 单词的构成:无空格字母构成一个单词
  • 输入字符串是否包括前导或者尾随空格?可以包括,但是反转后的字符不能包括
  • 如何处理两个单词间的多个空格?在反转字符串中间空格减少到只含一个

样例

传入一个字符串 " Hello World! ",返回 "World! Hello"

思路

  1. 首先 目标字符串null 或者长度为 0,则直接返回空字符串;
  2. 先去除两端的空格之后,再找到 目标字符串 的第一个空格的位置
  3. 然后用 subString() 将第一个空格之前的子字符串压入栈中
  4. 将目标字符串剩下的另一半子字符串继续进行第二步操作,直至 目标字符串 的长度变为0
  5. 将栈中的所有元素以此出栈,除最后一个元素外,其他元素尾部都加上一个空格: " "

注意当目标字符串没有空格时,取第一个空格的位置会返回 -1 ,此时用这个位置去取字符串会出现下标越界!

代码

代码语言:javascript
复制
public class Solution {
    /**
     * @param s : A string
     * @return : A string
     */
    public String reverseWords(String s) {
    	
    	if (s == null || s.length() == 0) {
            return "";
        }
    	
    	Stack<String> stack = new Stack<String>();
    	
    	while (s.length() != 0) {
    	    s = s.trim();  
	    	int i = s.indexOf(" ");
	    	
	    	if ( i== -1) {
	    		stack.push(s);
	    		break;
	    	}
	    	
	    	stack.push( s.substring(0, i) );
	    	s = s.substring(i, s.length());
	    	
    	}
    	
    	String str = "";
    	
    	while (!stack.isEmpty()) {
    		if(stack.size()==1)
    			str = str + stack.pop();
    		else 
    			str = str + stack.pop() + " ";
    	}
    	
    	return str;
    }
}

原题地址

LintCode:翻转字符串

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-07-082,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题意
  • 样例
  • 思路
  • 代码
  • 原题地址
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档