面试题58 - I. 翻转单词顺序
程序员文章站
2022-04-30 18:26:29
...
题目:
面试题58 - I. 翻转单词顺序
151. 翻转字符串里的单词
题解:
- 问题1:
- 问题2:
- 问题3:
1. 题解一:双指针
2. 题解二:分割 + 倒序
代码:
1. 代码一:双指针
public class 面试题58_1 {
// 方法1:双指针
public static String reverseWords(String s) {
s = s.trim(); // 删除首尾空格
int j = s.length() - 1;
int i = j;
StringBuilder res = new StringBuilder();
while(i >= 0)
{
while(i >= 0 && s.charAt(i) != ' ') // 搜索首个空格
{
i--;
}
String temp = s.substring(i + 1, j + 1); // 截取单词
res.append(temp + " "); // 添加单词
while(i >= 0 && s.charAt(i) == ' ') // 跳过单词间空格
{
i--;
}
j = i; // j 指向下个单词的尾字符
}
return res.toString().trim(); // 转化为字符串,删除尾部空格,并返回
}
public static void main(String[] args) {
String s1 = "the sky is blue";
String s2 = " hello world! ";
String s3 = "a good example";
String res1 = reverseWords(s1);
String res2 = reverseWords(s2);
String res3 = reverseWords(s3);
System.out.println(res1);
System.out.println(res2);
System.out.println(res3);
}
}
2. 代码二:分割 + 倒序
public class 面试题58_1 {
// 方法2:分割 + 倒序
public static String reverseWords(String s) {
s = s.trim(); // 删除首尾空格
String str[] = s.split(" "); // 以空格为分割符完成字符串分割
StringBuilder res = new StringBuilder();
for(int i = str.length - 1; i >= 0; i--) // 倒序遍历单词列表
{
if(str[i].equals("")) // 遇到空单词则跳过
{
continue;
}
res.append(str[i] + " "); // 将单词拼接至 StringBuilder
}
return res.toString().trim(); // 转化为字符串,删除尾部空格,并返回
}
public static void main(String[] args) {
String s1 = "the sky is blue";
String s2 = " hello world! ";
String s3 = "a good example";
String res1 = reverseWords(s1);
String res2 = reverseWords(s2);
String res3 = reverseWords(s3);
System.out.println(res1);
System.out.println(res2);
System.out.println(res3);
}
}
参考:
上一篇: 后缀自动机
下一篇: 给Button添加特定个数的圆角