企业为什么做网站,网站建设制作设计营销 中山,怎样做钓鱼网站,广州环保网站建设文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接#xff1a;344. 反转字符串 双指针法#xff0c;两个指针的元素直接调转即可
class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head end) {char temp … 文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接344. 反转字符串 双指针法两个指针的元素直接调转即可
class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head end) {char temp s[head];s[head] s[end];s[end--] temp;}}
}反转字符串II 题目链接541. 反转字符串 II 双指针法代码逻辑
初始化head、end双指针两指针相距2k作为操作区间在操作区间中反转前k个字符移动指针head移到endend往后移2k继续上述操作直到end指针超出界限此时将多余部分分情况反转 少于k全部反转大于k反转前k个
代码如下
class Solution {public String reverseStr(String s, int k) {int head 0;int end head 2 * k;char[] charArray s.toCharArray();while(end s.length()) {reverseString(charArray,head,head k - 1);head end;end 2 * k; }int rest s.length() - head;if(rest k) {reverseString(charArray,head,head k - 1);} else {reverseString(charArray,head,s.length() -1);}return new String(charArray);}public void reverseString(char[] s,int start,int end) {while(start end) {char temp s[start];s[start] s[end];s[end--] temp;}}
}替换数字 题目链接54. 替换数字 解题逻辑直接遍历使用StringBuilder拼接即可
import java.util.*;public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);String input scanner.nextLine(); // 读取一整行字符串SetCharacter nums new HashSet(Arrays.asList(1,2,3,4,5,6,7,8,9,0));StringBuilder result new StringBuilder();for(int i 0;i input.length();i) {if (nums.contains(input.charAt(i))) result.append(number);else result.append(input.charAt(i));}System.out.println(result);scanner.close();}
}当然这么写就绕过了此题的精髓。
这道题想要体现的点在于很多数组填充类的问题其做法都是先预先给数组扩容带填充后的大小然后在从后向前进行操作。
字符串的本质就是char型数组所以这个方法当然可以沿用其好处在于
避免数据覆盖如果从前往后填充在填充过程中可能会覆盖尚未处理的数据。而从后向前填充可以确保在填充新元素时不会影响到前面尚未处理的元素从而保证了数据的完整性和正确性。提高效率从后向前操作可以减少元素的移动次数。在数组扩容后若从前往后填充每插入一个新元素后面的元素都需要向后移动一位时间复杂度较高。而从后向前填充只需将新元素直接放置在合适的位置无需频繁移动其他元素提高了填充操作的效率。
代码如下
import java.util.Scanner;public class Main {public static String replaceNumber(String s) {int count 0; // 统计数字的个数int sOldSize s.length();for (int i 0; i s.length(); i) {if(Character.isDigit(s.charAt(i))){count;}}// 扩充字符串s的大小也就是每个空格替换成number之后的大小char[] newS new char[s.length() count * 5];int sNewSize newS.length;// 将旧字符串的内容填入新数组System.arraycopy(s.toCharArray(), 0, newS, 0, sOldSize);// 从后先前将空格替换为numberfor (int i sNewSize - 1, j sOldSize - 1; j i; j--, i--) {if (!Character.isDigit(newS[j])) {newS[i] newS[j];} else {newS[i] r;newS[i - 1] e;newS[i - 2] b;newS[i - 3] m;newS[i - 4] u;newS[i - 5] n;i - 5;}}return new String(newS);};public static void main(String[] args) {Scanner scanner new Scanner(System.in);String s scanner.next();System.out.println(replaceNumber(s));scanner.close();}
}