锁定老帖子 主题:一道关于字符串倒过来的面试题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-10-17
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-10-17
xiangqi 写道 字符串比如“ad2 lsdkf, lksdjf. sdkfj”倒序排列"sdkfj lksdjf. lsdkf, ad2" 每个单词是空格分开,标点符号当作字母,不能用String的自带的一些方法,比如indexof,trim,split等方法。 大概的伪码,字符串大的话可以用 StringBuffer Stack T; String S; for char c : origString { if(c == ' ') { T.push(S); S = ""; } S += c; } T.push(S); String destString; while(String str = T.pop() != null) { if(destString == null) destString = str; else destString += " " + str; } |
|
返回顶楼 | |
发表时间:2010-10-17
最后修改:2010-10-17
主要思想:
1.利用StringTokenizer对给定字符串进行分词 2.利用Collections进行反转 public static String reverse(String str, char delim){ StringTokenizer token = new StringTokenizer(str, String.valueOf(delim)); List<String> list = new ArrayList<String>(); while(token.hasMoreTokens()){ String text = token.nextToken(); list.add(text); } Collections.reverse(list); StringBuilder builder = new StringBuilder(str.length()); for (int i = 0; i < list.size(); i++) { String text = list.get(i); builder.append(text);; if(i < (list.size() - 1)){ builder.append(delim); } } return builder.toString(); } /** * @param args */ public static void main(String[] args) { System.out.println(reverse("ad2 lsdkf, lksdjf. sdkfj", ' ')); } |
|
返回顶楼 | |
发表时间:2010-10-18
将字符串转化为字符数组,然后将每个字符的位置交换就可以得到反转的字符串。
|
|
返回顶楼 | |
发表时间:2010-10-18
先整个字符串反转,再每个单词反转
|
|
返回顶楼 | |
发表时间:2010-10-18
Apache Common包的StringUtils.reverse()方法,代码都是开源的
|
|
返回顶楼 | |
发表时间:2010-10-18
如二楼压栈,出栈就ok了
|
|
返回顶楼 | |
发表时间:2010-10-18
翻转二次,首先全部翻转,再针对每个字符串翻转
|
|
返回顶楼 | |
发表时间:2010-10-18
其实,这道题,主要是考算法。
就 堆栈的 原理来实现。 即可 |
|
返回顶楼 | |
发表时间:2010-10-18
我觉得使用冒泡排序的方法也可以
public void reverseString(){ String s = "ad2 lsdkf, lksdjf. sdkfj"; char [] ch = s.toCharArray(); char temp; for (int i = 0; i < ch.length; i++) { for (int j = 0; j < ch.length- i - 1; j++) { temp = ch[j]; ch[j] = ch[j+1]; ch[j+1] = temp; } } System.out.println(new String(ch)); } |
|
返回顶楼 | |