LeetCode:541.Reverse String II(按照要求反转字符串)

£神魔★判官ぃ 2022-05-07 00:28 266阅读 0赞

文章最前: 我是Octopus,这个名字来源于我的中文名—章鱼;我热爱编程、热爱算法、热爱开源。所有源码在我的个人github ;这博客是记录我学习的点点滴滴,如果您对 Python、Java、AI、算法有兴趣,可以关注我的动态,一起学习,共同进步。

相关文章:

  1. LeetCode:55. Jump Game(跳远比赛)
  2. Leetcode:300. Longest Increasing Subsequence(最大增长序列)
  3. LeetCode:560. Subarray Sum Equals K(找出数组中连续子串和等于k)

文章目录:

java实现方式1:

python实现方式1:

java实现方式2.

python方法实现2:

源码地址:


给定一个字符串和一个整数 k,你需要对从字符串开头算起的每个 2k 个字符的前k个字符进行反转。如果剩余少于 k 个字符,则将剩余的所有全部反转。如果有小于 2k 但大于或等于 k 个字符,则反转前 k 个字符,并将剩余的字符保持原样。

示例:

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

要求:

该字符串只包含小写的英文字母。
给定字符串的长度和 k 在[1, 10000]范围内。


java实现方式1:

  1. /**
  2. * 翻转字符串
  3. *
  4. * @param s 字符串s
  5. * @param k k
  6. * @return 字符串
  7. */
  8. private String getReverseString(String s, int k) {
  9. if (s.length() <= k) {
  10. return new StringBuffer(s).reverse().toString();
  11. }
  12. if (s.length() > k && s.length() <= 2 * k) {
  13. String subString = s.substring(0, k);
  14. subString = new StringBuffer(subString).reverse().toString();
  15. return subString + s.substring(k);
  16. }
  17. if (s.length() > 2 * k) {
  18. LinkedList<String> list = new LinkedList<>();
  19. StringBuffer sb = new StringBuffer();
  20. int number = s.length() / k;
  21. for (int i = 0; i < number; i++) {
  22. list.add(s.substring(i * k, i * k + k));
  23. }
  24. if (number * k < s.length()) {
  25. list.add(s.substring(number * k));
  26. }
  27. for (int index = 0; index < list.size(); index++) {
  28. if (index % 2 == 0) {
  29. String temp = new StringBuffer(list.get(index)).reverse().toString();
  30. sb.append(temp);
  31. } else {
  32. sb.append(list.get(index));
  33. }
  34. }
  35. return sb.toString();
  36. }
  37. return null;
  38. }

时间复杂度:O(n)

空间复杂度:O(n)


python实现方式1:

  1. def get_reverse_string(s, k):
  2. # 当s字符串长度小于k的值
  3. if len(s) <= k:
  4. return s[::-1]
  5. # 当字符串长度在k和2k之间
  6. if len(s) > k and len(s) <= 2 * k:
  7. temp_str = s[0: k]
  8. return temp_str[::-1] + s[k:len(s)]
  9. # 当字符串长度大于2*k
  10. if len(s) > 2 * k:
  11. list = []
  12. sb = ''
  13. number = len(s) // k
  14. for i in range(number):
  15. list.append(s[i * k:i * k + k])
  16. if number * k < len(s):
  17. list.append(s[number * k:len(s)])
  18. for i in range(len(list)):
  19. if i % 2 == 0:
  20. sb += list[i][::-1]
  21. else:
  22. sb += list[i]
  23. return sb
  24. return '-1'

时间复杂度:O(n)

空间复杂度:O(n)


java实现方式2.

  1. /**
  2. * 翻转字符串
  3. *
  4. * @param s 字符串s
  5. * @param k k
  6. * @return 字符串
  7. */
  8. public String reverseStr2(String s, int k) {
  9. LinkedList<String> list = new LinkedList<>();
  10. StringBuffer sb = new StringBuffer();
  11. int number = s.length() / k;
  12. for (int i = 0; i < number; i++) {
  13. list.add(s.substring(i * k, i * k + k));
  14. }
  15. if (number * k < s.length()) {
  16. list.add(s.substring(number * k));
  17. }
  18. for (int index = 0; index < list.size(); index++) {
  19. if (index % 2 == 0) {
  20. String temp = new StringBuffer(list.get(index)).reverse().toString();
  21. sb.append(temp);
  22. } else {
  23. sb.append(list.get(index));
  24. }
  25. }
  26. return sb.toString();
  27. }

时间复杂度:O(n)

空间复杂度:O(n)


python方法实现2:

  1. def get_reverse_string(s, k):
  2. list = []
  3. sb = ''
  4. number = len(s) // k
  5. for i in range(number):
  6. list.append(s[i * k:i * k + k])
  7. if number * k < len(s):
  8. list.append(s[number * k:len(s)])
  9. for i in range(len(list)):
  10. if i % 2 == 0:
  11. sb += list[i][::-1]
  12. else:
  13. sb += list[i]
  14. return sb

时间复杂度:O(n)

空间复杂度:O(n)


源码地址:

https://github.com/zhangyu345293721/leetcode

发表评论

表情:
评论列表 (有 0 条评论,266人围观)

还没有评论,来说两句吧...

相关阅读

    相关 541. 字符串 II

    给定一个字符串 s 和一个整数 k,从字符串开头算起,每 2k 个字符反转前 k 个字符。 如果剩余字符少于 k 个,则将剩余字符全部反转。 如果剩余字符小于 2k 但大

    相关 LeetCode541. 字符串 II

    给定一个字符串和一个整数 k,你需要对从字符串开头算起的每个 2k 个字符的前k个字符进行反转。如果剩余少于 k 个字符,则将剩余的所有全部反转。如果有小于 2k 但大于或等于

    相关 541. 字符串 II

    给定一个字符串和一个整数 k,你需要对从字符串开头算起的每个 2k 个字符的前k个字符进行反转。如果剩余少于 k 个字符,则将剩余的所有全部反转。如果有小于 2k 但大于或等于