Java程序反转给定字符串中的单词
示例:让输入字符串为“我非常喜欢这个程序”。该函数应将字符串更改为“much very program this like i”
例子:
Input: s = “geeks quiz practice code”
Output: s = “code practice quiz geeks”
Input: s = “getting good at coding needs a lot of practice”
Output: s = “practice of lot a needs coding at good getting”
算法:
- 最初,将给定字符串的单个单词逐个反转,对于上面的示例,在反转单个单词之后,字符串应该是“i ekil siht margorp yrev hcum”。
- 在上面的示例中,从头到尾反转整个字符串以获得所需的输出“much very program this like i”。
下面是上述方法的实现:
Java
// Java program to reverse
// a String
import java.util.*;
class GFG{
// Reverse the letters of
// the word
static void reverse(char str[],
int start,
int end)
{
// Temporary variable to
// store character
char temp;
while (start <= end)
{
// Swapping the first and
// last character
temp = str[start];
str[start] = str[end];
str[end] = temp;
start++;
end--;
}
}
// Function to reverse words
static char[] reverseWords(char []s)
{
// Reversing individual words as
// explained in the first step
int start = 0;
for (int end = 0; end < s.length; end++)
{
// If we see a space, we reverse the
// previous word (word between
// the indexes start and end-1
// i.e., s[start..end-1]
if (s[end] == ' ')
{
reverse(s, start, end);
start = end + 1;
}
}
// Reverse the last word
reverse(s, start, s.length - 1);
// Reverse the entire String
reverse(s, 0, s.length - 1);
return s;
}
// Driver Code
public static void main(String[] args)
{
String s =
"i like this program very much ";
char []p = reverseWords(s.toCharArray());
System.out.print(p);
}
}
// This code is contributed by gauravrajput1
Java
// Java program to reverse a
// string
public class ReverseWords
{
public static void main(String[] args)
{
String s[] =
"i like this program very much".split(" ");
String ans = "";
for (int i = s.length - 1; i >= 0; i--)
{
ans += s[i] + " ";
}
System.out.println("Reversed String:");
System.out.println(ans.substring(0,
ans.length() - 1));
}
}
Java
// Java code to reverse a string
class GFG{
// Reverse the string
public static String[] RevString(String[] s,
int l)
{
// Check if number of words is even
if (l % 2 == 0)
{
// Find the middle word
int j = l / 2;
// Starting from the middle
// start swapping words at
// jth position and l - 1 - j position
while (j <= l - 1)
{
String temp;
temp = s[l - j - 1];
s[l - j - 1] = s[j];
s[j] = temp;
j += 1;
}
}
// Check if number of words is odd
else
{
// Find the middle word
int j = (l / 2) + 1;
// Starting from the middle start
// swapping the words at jth
// position and l-1-j position
while (j <= l - 1)
{
String temp;
temp = s[l - j - 1];
s[l - j - 1] = s[j];
s[j] = temp;
j += 1;
}
}
// Return the reversed sentence
return s;
}
// Driver Code
public static void main(String[] args)
{
String s = "getting good at coding " +
"needs a lot of practice";
String[] words = s.split("\s");
words = RevString(words, words.length);
s = String.join(" ", words);
System.out.println(s);
}
}
// This code is contributed by MuskanKalra1
输出
much very program this like i
另一种方法:
我们可以通过以相反的方式拆分和保存字符串来完成上述任务。
下面是上述方法的实现:
Java
// Java program to reverse a
// string
public class ReverseWords
{
public static void main(String[] args)
{
String s[] =
"i like this program very much".split(" ");
String ans = "";
for (int i = s.length - 1; i >= 0; i--)
{
ans += s[i] + " ";
}
System.out.println("Reversed String:");
System.out.println(ans.substring(0,
ans.length() - 1));
}
}
输出:
Reversed String:
much very program this like i
时间复杂度: O(n)
不使用任何额外空间:
上面的任务也可以通过从中间开始拆分和直接交换字符串来完成。由于涉及直接交换,因此消耗的空间也更少。
下面是上述方法的实现:
Java
// Java code to reverse a string
class GFG{
// Reverse the string
public static String[] RevString(String[] s,
int l)
{
// Check if number of words is even
if (l % 2 == 0)
{
// Find the middle word
int j = l / 2;
// Starting from the middle
// start swapping words at
// jth position and l - 1 - j position
while (j <= l - 1)
{
String temp;
temp = s[l - j - 1];
s[l - j - 1] = s[j];
s[j] = temp;
j += 1;
}
}
// Check if number of words is odd
else
{
// Find the middle word
int j = (l / 2) + 1;
// Starting from the middle start
// swapping the words at jth
// position and l-1-j position
while (j <= l - 1)
{
String temp;
temp = s[l - j - 1];
s[l - j - 1] = s[j];
s[j] = temp;
j += 1;
}
}
// Return the reversed sentence
return s;
}
// Driver Code
public static void main(String[] args)
{
String s = "getting good at coding " +
"needs a lot of practice";
String[] words = s.split("\s");
words = RevString(words, words.length);
s = String.join(" ", words);
System.out.println(s);
}
}
// This code is contributed by MuskanKalra1
输出:
practice of lot a needs coding at good getting
有关详细信息,请参阅有关给定字符串中的反向单词的完整文章!