编写一个函数,其作用是将输入的字符串反转过来。
示例 1:
输入: "hello"
输出: "olleh"
示例 2:
输入: "A man, a plan, a canal: Panama"
输出: "amanaP :lanac a ,nalp a ,nam A"
思路一:由于昨天刚学到集合与框架中的 Collections 中可以将 ArrayList 的元素反转,所只需将字符串使用 toCharArray 的方法转换为字符数组,然后加入到 ArrayList 中,使用工具类反转,然后将再转换回来即可。
注意:字符数组转换成字符串可使用:
- new String(char[] a);
- String.valueOf(char[] a);
class Solution {
public String reverseString(String s) {
char[] a = s.toCharArray();
List<Character> list = new ArrayList<>();
for(char i:a) {
list.add(i);
}
Collections.reverse(list);
for(int i = 0;i < a.length;i++) {
a[i] = list.get(i);
}
return String.valueOf(a);
}
}
思路二:还是讲字符串转换为字符数组后,在原地置换,利用两个指针,一个从数组头开始自增,一个从数组为尾自减,知道两个相遇,利用交换两个代表的数组的元素,最后转换为字符串。
class Solution {
public String reverseString(String s) {
if(s == "") {
return null;
}
char[] a = s.toCharArray();
char temp;
int l = 0,r = a.length-1;
while(l < r) {
temp = a[l];
a[l] = a[r];
a[r] = temp;
l++;
r--;
}
return new String(a);
}
}
思路三:利用额外的数组,进行保留交换。
class Solution {
public String reverseString(String s) {
char[] chars = s.toCharArray();
char[] newString = new char[chars.length];
for (int i = chars.length - 1, t = 0; i >= 0; i--, t++) {
newString[t] = chars[i];
}
return new String(newString);
}
}