力扣-->#344+#541.反转字符串I+II -->字符串-简单(双指针、模拟)

题1. 344. 反转字符串 - 力扣(LeetCode) (leetcode-cn.com)

题目描述:
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。

示例 1:
输入:s = ["h","e","l","l","o"]
输出:["o","l","l","e","h"]

示例 2:
输入:s = ["H","a","n","n","a","h"]
输出:["h","a","n","n","a","H"]

提示:
1 <= s.length <= 105
s[i] 都是 ASCII 码表中的可打印字符

这道题比较简单,但也容易出错,基本思路都比较清晰,容易想到。
注意点:
1.关于for循环的特殊使用,用得少,但不能忘;
2.双指针的使用,常用在链表反转等与反转有关的题目上,对此需要熟练的立即反应。

执行结果:通过
执行用时:1 ms, 在所有 Java 提交中击败了92.95%的用户
内存消耗:44.6 MB, 在所有 Java 提交中击败了94.75%的用户
通过测试用例:477 / 477

双指针法:

class Solution {
    public void reverseString(char[] s) {
        char temp;
        for(int left=0,right=s.length-1;left

题2.541. 反转字符串 II - 力扣(LeetCode) (leetcode-cn.com)

题目描述:
给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。
如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

 示例 1:
输入:s = "abcdefg", k = 2
输出:"bacdfeg"

示例 2:
输入:s = "abcd", k = 2
输出:"bacd"

提示:
1 <= s.length <= 10^4
s 仅由小写英文组成
1 <= k <= 10^4

这道题的难点在于理清满足哪些条件的时候才需要反转哪些字符:即反转每次下标从2k的倍数开始,长度为k的字符,若字符串长度不足k,则全部反转,其余情况不需反转,无需处理。所以解题时关键在于对上述条件下的字符进行反转。

执行结果:通过
执行用时:1 ms, 在所有 Java 提交中击败了63.06%的用户
内存消耗:38.3 MB, 在所有 Java 提交中击败了82.92%的用户
通过测试用例:60 / 60

模拟法:

class Solution {
    public String reverseStr(String s, int k) {
        int n=s.length();
        char[] arr=s.toCharArray();
        for(int i=0;i

平平无奇小白程序媛一枚,欢迎各位大佬交流指教,如有不正确的地方,欢迎留言改正,谢谢!!!

你可能感兴趣的:(力扣,leetcode,算法,模拟,字符串,java)