Given a string s, reverse the order of characters in each word within a sentence while still preserving whitespace and initial word order.
Example 1:
Input: s = "Let's take LeetCode contest" Output: "s'teL ekat edoCteeL tsetnoc"
Example 2:
Input: s = "God Ding" Output: "doG gniD"
Constraints:
1 <= s.length <= 5 * 104s contains printable ASCII characters.s does not contain any leading or trailing spaces.s.s are separated by a single space.program main
implicit none
character(len=:), allocatable :: s, reversed_string
integer :: i, j, k
! Example 1
s = "Let's take LeetCode contest"
call reverse_words(s)
write (*,*) 'Example 1:'
write (*,'(A)') trim(adjustl(s)) // ' -> ' // trim(adjustl(reversed_string))
! Example 2
s = "God Ding"
call reverse_words(s)
write (*,*) 'Example 2:'
write (*,'(A)') trim(adjustl(s)) // ' -> ' // trim(adjustl(reversed_string))
contains
subroutine reverse_words(s)
implicit none
character(len=*), intent(inout) :: s
integer :: i, j
do i = 1, len(s)
if (s(i:i) == ' ') then
cycle
end if
j = i
do while (j < len(s) .and. s(j+1:j+1) /= ' ')
j = j + 1
end do
reversed_string = s(i:j-1)
call reverse_string(reversed_string)
s(i:j-1) = reversed_string
end do
end subroutine reverse_words
subroutine reverse_string(s)
implicit none
character(len=*), intent(inout) :: s
integer :: i, j
i = 1
j = len(s)
do while (i < j)
s(i:i) = s(j:j)
s(j:j) = s(i:i)
i = i + 1
j = j - 1
end do
end subroutine reverse_string
end program main
Example 1: ''''s kkke ddddddde sssssst -> Example 2: ood nnng ->
!This script takes a string as input and reverses the order of characters in each word within a sentence while still preserving whitespace and initial word order.
program reverse_words
implicit none
character(len=*), parameter :: newline = char(10) // ASCII code for newline character
character(len=*) :: s
character(len=:), allocatable :: words(:)
integer :: i, j, k, n
!Read input string from stdin
read(*,*) s
!Split input string into individual words using whitespace as delimiter
words = trim(s)
words = words(1:len_trim(words)) // split string into individual words
!Reverse the order of characters in each word
do i = 1, size(words)
words(i) = words(i)(len_trim(words(i)):1:-1) // reverse order of characters in each word
end do
!Join the reversed words back into a single string
n = 0
do i = 1, size(words)
n = n + len_trim(words(i)) + 1
end do
allocate(character(len=n) :: s)
s = ''
do i = 1, size(words)
s = trim(s) // words(i) // ' '
end do
!Print output string to stdout
write(*,*) s
end program reverse_words
temp.f95:5:58:
5 | character(len=*), parameter :: newline = char(10) // ASCII code for newline character
| 1
Error: Symbol ‘ascii’ at (1) has no IMPLICIT type
temp.f95:19:45:
19 | words(i) = words(i)(len_trim(words(i)):1:-1) // reverse order of characters in each word
| 1
Error: Syntax error in SUBSTRING specification at (1)
temp.f95:27:29:
27 | allocate(character(len=n) :: s)
| 1
Error: Allocate-object at (1) is neither a data pointer nor an allocatable variable
temp.f95:6:21:
6 | character(len=*) :: s
| 1
Error: Entity with assumed character length at (1) must be a dummy argument or a PARAMETER
def reverse_words_in_string(s: str) -> str:
return " ".join(word[::-1] for word in s.split(" "))
The algorithm first splits the input string s into words based on whitespace. Then, for each word, it reverses the order of characters and appends it to the output. Finally, the reversed words are joined with whitespace and returned as the result.
In each language implementation:
- C++: The algorithm uses istringstream to split the string into words and ostringstream to create the output string.
- Java: The algorithm splits the string using split, reverses each word using StringBuilder and then String.join to join the words with a space delimiter.
- Python: The algorithm uses a list comprehension to reverse the words in the input string and join to concatenate them.
- JavaScript: The algorithm uses split, map, and join operations on the input string to reverse each word and concatenate them.
#include <string>
#include <algorithm>
#include <sstream>
std::string reverseWordsInString(const std::string& s) {
std::istringstream iss(s);
std::ostringstream oss;
std::string word;
while (iss >> word) {
std::reverse(word.begin(), word.end());
oss << word << ' ';
}
std::string result = oss.str();
if (!result.empty()) result.pop_back();
return result;
}
The algorithm first splits the input string s into words based on whitespace. Then, for each word, it reverses the order of characters and appends it to the output. Finally, the reversed words are joined with whitespace and returned as the result.
In each language implementation:
- C++: The algorithm uses istringstream to split the string into words and ostringstream to create the output string.
- Java: The algorithm splits the string using split, reverses each word using StringBuilder and then String.join to join the words with a space delimiter.
- Python: The algorithm uses a list comprehension to reverse the words in the input string and join to concatenate them.
- JavaScript: The algorithm uses split, map, and join operations on the input string to reverse each word and concatenate them.