今天早上面试淘宝,主要考察了两个算法。这个是第二个:逆置一个String类型的字符串。
我想了两个思路:
(1) 创建一个临时字符串temp, 循环temp += str.charAt(leng--);
public String reverse(String str) {
String temp = "";
int length = str.length();
for(int i=length-1;i > 0; i--) {
temp += str.charAt(i);
}
return temp;
}
(2) 先将整个字符串打散成字符数组,然后第一个跟最后一个交换,第二个跟倒数第二个字符串交换。以此类推。最后将整个字符数组合成一个字符串即可。
[代码略]
后来回来在网上看了人家的一些方法,发现StringBuffer里面就有一个reverse()方法。赶紧去看看,后来发现,他的思路跟我的第二个想法差不多嘛。不过人家考虑的东西更加全面,即将DBCS也考虑了进去。
public AbstractStringBuilder reverse() {
boolean hasSurrogate = false;
int n = count - 1;
for (int j = (n-1) >> 1; j >= 0; --j) {
char temp = value[j];
char temp2 = value[n - j];
if (!hasSurrogate) {
hasSurrogate = (temp >= Character.MIN_SURROGATE && temp <= Character.MAX_SURROGATE)
|| (temp2 >= Character.MIN_SURROGATE && temp2 <= Character.MAX_SURROGATE);
}
value[j] = temp2;
value[n - j] = temp;
}
if (hasSurrogate) {
// Reverse back all valid surrogate pairs
for (int i = 0; i < count - 1; i++) {
char c2 = value[i];
if (Character.isLowSurrogate(c2)) {
char c1 = value[i + 1];
if (Character.isHighSurrogate(c1)) {
value[i++] = c1;
value[i] = c2;
}
}
}
}
return this;
}
唉 可惜 淘宝一面就挂掉了。
分享到:
相关推荐
输入一串字符,将其逆置输出。输入一串字符,将其逆置输出。输入一串字符,将其逆置输出。
输出文件只有一行,包含一个串,为要求的输出结果。行末要输出一个回车符。 【输入样例】 helloworld llowor 【输出样例】 herowollld 【时间限制】 1s 【空间限制】 65536KB
这个代码用于单词逆置,例如:who you are 逆置玩之后的字符串为:ohw uoy era
C语言实现如何逆置字符串
/*////////////////////////////////////////////////////... * 把字符串中的内容逆置。 * 例如,原字符串中内容为hello,处理后字符串中内容为olleh * */////////////////////////////////////////////////////////
字符串转置,字符串的逆置
输入两个串,一个串是另一个串的字串,逆置主串中的子串,输出
包括汉字字符的字符串逆置,用结构体模拟unicode存储字符
C语言算法举例:字符串排序和链表逆置算法。
196 字符串逆置 C语言源代码文件
编制程序实现字符串的逆转功能。要求具有友好的输入、输出界面。如输入This is a test 输出 tset a si sihT
C#_处理字符串方法总结.doc
数据结构,串的操作 链式存储 逆置子串 ***题目3: 若S和T是用结点大小为1的单链表存储的两个串,设计算法将S中首次与T匹配的子串逆置。
输出文件只有一行,包含一个串,为要求的输出结果。行末要输出一个回车符。 【输入样例】 helloworld llowor 【输出样例】 herowollld 【时间限制】 1s 【空间限制】 65536KB ...
计算机二级c语言资料 计算机二级c语言资料_计算机二级c语言编程练习题之把字符串逆置
在一个链表中,每K个结点逆置一次
一:程序中,我们定义了一个 reverse 函数,用于反转字符串中的一部分。该函数接受三个参数:指向字符串的指针、要反转的部分的起始位置和结束位置。在函数中,我们使用一个循环来交换起始位置和结束位置之间的字符...
包含链表及字符串处理函数的C文件及头文件,链表和字符串的处理函数相当丰富,链表处理函数提供了链表的增删改查,逆置、建立、遍历、销毁等;字符串处理函数有字符串长度计算,字符串复制、选择性复制、拼接、查找...
在这个示例程序中,我们定义了一个 `reverseArray` 函数来部分逆置数组。在 `main` 函数中,我们声明一个整数数组 `arr`,然后调用 `reverseArray` 函数来部分逆置数组中索引从 `start` 到 `end` 的部分。最后,我们...
已知Q是一个非空队列,S是一个空栈。仅用队列和栈的ADT函数和少量工作变量,编写一个算法,将队列Q中的所有元素逆置