当前位置: 首页 > 知识库问答 >
问题:

只反转字符串中的字母,并保持单词的顺序相同

徐飞尘
2023-03-14

我只需要反转字符串中的字母,并使用Character.is字母将符号和数字保持在相同的位置,并且我还需要保持反转单词的相同顺序。我的代码反转字符串并将符号和数字保持在适当的位置,但更改单词的顺序,例如:

我的输入字符串:

a1bcd efg!H

我的输出字符串:

h1gfe dcb!A.

相反,我的输出应该是:

d1cba hgf! e

class AnagramsMaker {
    public static String createAnagram(String StringToReverse) {
        char[] stringToChar = StringToReverse.toCharArray();
        int arrayStart = 0;
        int arrayEnd = stringToChar.length - 1;

        while (arrayStart < arrayEnd) {
            if (Character.isLetter(stringToChar[arrayStart]) && Character.isLetter(stringToChar[arrayEnd])) {
                char temp = stringToChar[arrayStart];
                stringToChar[arrayStart] = stringToChar[arrayEnd];
                stringToChar[arrayEnd] = temp;

                arrayStart++;
                arrayEnd--;
            }
            else if (Character.isLetter(stringToChar[arrayStart]) && !Character.isLetter(stringToChar[arrayEnd])) {
                arrayEnd--;
            }
            else if (!Character.isLetter(stringToChar[arrayStart]) && Character.isLetter(stringToChar[arrayEnd])) {
                arrayStart++;
            }
            else {
                arrayStart++;
                arrayEnd--;
            }
        }

        return String.valueOf(stringToChar);
    }
}

共有3个答案

柯波娃
2023-03-14

这是python的解决方案。获取字符串开头和结尾的引用,然后检查它是否是字母表,然后增加引用

def reverse_only_letters(string):
    l = 0
    r = len(string)-1
    a = list(string)
    while l<r:
        if a[l].isalpha() and a[r].isalpha():
            temp = a[l]
            a[l] = a[r]
            a[r] = temp
            l += 1
            r -= 1
        elif not a[l].isalpha():
            l += 1
        elif not a[r].isalpha():
            r -= 1
    return "".join(a)
龙兴学
2023-03-14
    String plain = "a1bcd efg!h";

    String reversed = Arrays.stream(plain.split(" ")).map(str -> {
        char[] chars = str.toCharArray();
        int i = 0;
        int j = chars.length - 1;
        while(i < j) {
            if(Character.isLetter(chars[i]) && Character.isLetter(chars[j])) {
                char tmp = chars[i];
                chars[i] = chars[j];
                chars[j] = tmp;
                i++;
                j--;
            } else if(!Character.isLetter(chars[i]))
                i++;
            else
                j--;
        }
        return new String(chars);
    }).collect(Collectors.joining(" "));

您可以通过利用java流来更解密地完成它。此代码的工作原理是跨过特殊字符并颠倒ith和jth字符的位置,如果它们都是有效字符。

堵景天
2023-03-14

按照当前的方式,实际上根本不需要修改方法,而是可以利用它来反转每个单词,而不是一次反转整个字符串。

我将您当前的方法重命名为public静态String createAnagramWord(String StringToReverse),然后创建了下面的方法:

public static String createAnagram(String str) {
    String anagram = "";
    String [] arr = str.split(" ");

    for (String s : arr) {
        anagram += createAnagramWord(s) + " ";
    }
    return anagram;
}

在这里,我使用您当前的方法,其中包含createAnagramWord

在这个方法中,请注意,我用”在空格中拆分传递给它的字符串(您也可以使用\\s,请参阅本文),然后使用增强的for循环迭代从拆分返回的数组。

for循环中,新的字符串是通过在每个颠倒的单词后面加一个空格来创建的。

示例运行:

public static void main(String [] args) { 
    String reverse = "a1bcd efg!h";
    System.out.println(createAnagram(reverse));
}

输出:

d1cba hgf! e

注意:
在循环中追加字符串在技术上应该利用StringBuilder,然而,我认为这超出了这个问题的范围,决定省略它。

此外,如果出于某种原因不想将逻辑分为两个不同的方法,可以将此逻辑改写为当前方法。

 类似资料:
  • 问题内容: 我的代码中有一个小问题。我正在尝试反转单词和字符串的字符。例如,“狗跑了”将变成“ ehT神纳尔” 该代码几乎可以正常工作。它只是不添加空格。你会怎么做? 问题答案: 您走在正确的轨道上。主要问题是一个空字符串,而不是一个空格(即使您解决了这个问题,您可能也不想在最后一个单词之后留一个空格)。 这是您可以更简洁地执行此操作的方法:

  • 考虑这个例子,从0到10颠倒数字的顺序:<代码> 这以一种双重的方式颠倒了顺序。如果我输入100个从0到10的数字,它包含a 对于字典顺序,我需要同样的东西。我有一根固定长度为10的绳子。如何颠倒字典顺序? 如果它只包含,这将非常简单。但是它也可以包含数字和,并且区分大小写。 有人知道怎么做吗?

  • 本文向大家介绍在JavaScript中反转字符串中的单词,包括了在JavaScript中反转字符串中的单词的使用技巧和注意事项,需要的朋友参考一下 问题 我们需要编写一个JavaScript函数,该函数接受代表一个句子的字符串。 我们的函数应该颠倒字符串中出现的单词的顺序,并返回新的字符串。 这意味着最后一个单词应该成为第一个,第二个最后一个应该成为第二个,依此类推。 示例 以下是代码- 输出结果

  • 按字母顺序排序字符串中的字符。 使用扩展运算符(...),Array.sort() 和 String.localeCompare() 对 str 中的字符进行排序,使用 String.join('') 重新组合。 const sortCharactersInString = str => [...str] .sort((a, b) => a.localeCompare(b))

  • 给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。 示例 1: 输入: "Let's take LeetCode contest" 输出: "s'teL ekat edoCteeL tsetnoc"  注意:在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。 解法: /** * @param {string} s * @

  • 问题内容: 我想按字母顺序比较上述两个字符串(在本例中为“ Project”,然后是“ Sunject”,因为“ P”在“ S”之前)。有谁知道如何用Java做到这一点? 问题答案: 可能需要或可能不需要。 如果需要本地化的字符串排序,请查看此链接。