📌  相关文章
📜  Java程序反转给定字符串中的单词

📅  最后修改于: 2022-05-13 01:57:08.707000             🧑  作者: Mango

Java程序反转给定字符串中的单词

示例:让输入字符串为“我非常喜欢这个程序”。该函数应将字符串更改为“much very program this like i”

反话

例子

算法

  • 最初,将给定字符串的单个单词逐个反转,对于上面的示例,在反转单个单词之后,字符串应该是“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

有关详细信息,请参阅有关给定字符串中的反向单词的完整文章!