Java 中反转带特殊字符的字符串

2024 年 9 月 10 日 | 阅读 3 分钟

如果您得到一个既包含字母(从“a”到“z”以及“A”到“Z”)又包含特殊字符的字符串,您需要反转该字符串而不改变特殊字符。

示例

输入: s = "j,s$v"

输出: s = "v,s$j"

请注意,$ 和 , 都没有被移动。

仅反转了“jsv”。

输入: str = "Bc,d,ef!$"

输出: str = "fe,d,cB!$"

简便解法

  • 创建一个名为 temp[ ] 的字符数组。
  • 从提供的数组中将字母复制到 temp[ ]。
  • 对 temp[ ] 应用常见的字符串反转方法。
  • 现在,对输入字符串和临时数据执行一次循环迭代。用当前的 temp[ ] 字符替换输入字符串中的任何字母字符。

上述策略的应用如下所示

文件名:ReverseStringSpcl.java

输出

The string after reversing is: eD,C,Ba!$

时间复杂度:O(N),其中 N 是字符串的长度。

空间复杂度:O(N),其中 N 代表字符串的长度。

有效方法

上述解决方案的时间复杂度为 O(n),但它使用了更多的空间并且遍历了输入字符串两次。

只需一次遍历且不占用额外空间,我们就可以实现反转。算法如下。

上述方法已按以下方式实现:

文件名:ReverseStringSpcl1.java

输出

Given string is: b!!!c.d.e,f'g,hij
 The string after reversing is: j!!!i.h.g,f'e,dcb 

时间复杂度: O(N),其中 N 是字符串的长度。

空间复杂度: O (1)。


下一个主题java 获取时间戳