论坛首页 Java企业应用论坛

一道关于字符串倒过来的面试题

浏览 18559 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-10-17  
字符串比如“ad2 lsdkf, lksdjf. sdkfj”倒序排列"sdkfj lksdjf. lsdkf, ad2"  每个单词是空格分开,标点符号当作字母,不能用String的自带的一些方法,比如indexof,trim,split等方法。
   发表时间: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;
}

 
0 请登录后投票
   发表时间: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", ' '));
	}
0 请登录后投票
   发表时间:2010-10-18  
将字符串转化为字符数组,然后将每个字符的位置交换就可以得到反转的字符串。
0 请登录后投票
   发表时间:2010-10-18  
先整个字符串反转,再每个单词反转
0 请登录后投票
   发表时间:2010-10-18  
Apache Common包的StringUtils.reverse()方法,代码都是开源的
0 请登录后投票
   发表时间:2010-10-18  
如二楼压栈,出栈就ok了
0 请登录后投票
   发表时间:2010-10-18  
翻转二次,首先全部翻转,再针对每个字符串翻转
0 请登录后投票
   发表时间:2010-10-18  
其实,这道题,主要是考算法。

就 堆栈的 原理来实现。

即可
0 请登录后投票
   发表时间: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));
}
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics