快捷搜索:  汽车  科技

前端怎么判断字符串的长度(蹲在马桶看算法)

前端怎么判断字符串的长度(蹲在马桶看算法)public class ReverseStr { private void swap(char[] ch int l int r) { while (l < r) { char temp = ch[l]; ch[l ] = ch[r]; ch[r--] = temp; } } public String reverseStr(String s int k) { char[] arr = s.toCharArray(); int length = arr.length; int i = 0; while (i < length) { int j = Math.min(i k - 1 length - 1);// 可以有效防止数组越界异常 swap(arr i j); i = 2 * k;//

题目描述:

前端怎么判断字符串的长度(蹲在马桶看算法)(1)

题目大概意思:给一个字符串s,和一个整数k。写一个函数把该字符串从开头到每个2k个字符串的前k个字符串反转。如果字符串长度小于k,则全部反转,如果字符串长度大于k而小于2k。则反转前k个,剩余的保持原来的样子。

正常逻辑思路(小学生逻辑,易于理解):

  1. 将传入的参数字符串分成 length/2k 组(这里length表示字符串的长度)。
  2. 如果k<length 直接反转整个字符串。 程序停止
  3. 如果length/2k=0(整型的除法是取下整),将前[0,k)的字符串进行反转,[k length)拼接在后面。程序停止
  4. 对length/2k-1组的每一组都执行[0 k)反转,[k length)拼接在后面。各组有序的连接起来
  5. 最后一组数据按第2条或第3条的情况处理。

我这里用双指针的思路贴出代码(解释见注释)。

public class ReverseStr { private void swap(char[] ch int l int r) { while (l < r) { char temp = ch[l]; ch[l ] = ch[r]; ch[r--] = temp; } } public String reverseStr(String s int k) { char[] arr = s.toCharArray(); int length = arr.length; int i = 0; while (i < length) { int j = Math.min(i k - 1 length - 1);// 可以有效防止数组越界异常 swap(arr i j); i = 2 * k;// 用i去维护“length/2k”个组 } return String.valueOf(arr); } public static void main(String[] args) { String string = "abcdefg"; int k = 2; ReverseStr reverseStr = new ReverseStr(); System.out.println(reverseStr.reverseStr(string k)); } } 欢迎斧正!

猜您喜欢: