前端怎么判断字符串的长度(蹲在马桶看算法)
前端怎么判断字符串的长度(蹲在马桶看算法)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;//
题目描述:
题目大概意思:给一个字符串s,和一个整数k。写一个函数把该字符串从开头到每个2k个字符串的前k个字符串反转。如果字符串长度小于k,则全部反转,如果字符串长度大于k而小于2k。则反转前k个,剩余的保持原来的样子。
正常逻辑思路(小学生逻辑,易于理解):
- 将传入的参数字符串分成 length/2k 组(这里length表示字符串的长度)。
- 如果k<length 直接反转整个字符串。 程序停止
- 如果length/2k=0(整型的除法是取下整),将前[0,k)的字符串进行反转,[k length)拼接在后面。程序停止
- 对length/2k-1组的每一组都执行[0 k)反转,[k length)拼接在后面。各组有序的连接起来
- 最后一组数据按第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)); } } 欢迎斧正!