代码随想录 第八天 | 344.反转字符串 ● 541. 反转字符串II ● 卡码网:54.替换数字 ● 151.翻转字符串里的单词 ● 卡码网:55.右旋转字符串 . (151 55 放弃 可能要用c++)
LeetCode:344. 反转字符串 - 力扣(LeetCode)
思路: 双指针的想法用while循环遍历两侧指针,效率高
class Solution { public void reverseString(char[] s) { int i = 0,j = s.length - 1; while(i < j){ char temp; temp = s[j]; s[j] = s[i]; s[i] = temp; i++; j--; } } }
LeetCode:541. 反转字符串 II - 力扣(LeetCode)
思路:一般来说可能要用i++,但这道题可以直接2k走,判断到剩余字符串长度不满足2k走两个题目上的条件。
可笑的是,第一步,第二步可以用一行代码解决,好离谱。。。
等同
啊!
还有一个min的更看不懂了
一行就搞完了.....
class Solution { public String reverseStr(String s, int k) { char[] charArray = s.toCharArray(); int start = 0; for(int i = start; i < charArray.length; i += 2 * k){ //先按2k走,i + k 超出看剩余 if (i + k <= charArray.length) { reverse(charArray,i,i + k - 1); continue; } //第一步:剩余字符大于k,小于2k,反转前k个 if( charArray.length - i >= k && charArray.length - i < 2 * k){ reverse(charArray,i,i + k -1); } //第二步: 剩余少于k,全部翻转 if( charArray.length - i< k ){ reverse(charArray,i,charArray.length - 1); } } return new String(charArray); } //反转 public void reverse(char[] s, int i, int i1) { for(;i < i1;i++,i1--){ char temp = s[i]; s[i] = s[i1]; s[i1] = temp; } } }
思路:直接append替换就好。
//Character.isDigit(s.charAt(i)) 是一个更简洁的方式来检查字符串中的字符是否为数字
//charAt
方法来遍历字符串中的每个字符,判断是否为数字,然后进行替换。
//append
方法实际上是用于在字符串构建器(StringBuilder)的末尾添加字符或字符串,其实就是替换。
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String c = sc.nextLine(); StringBuilder sb = new StringBuilder(); for(int i = 0; i < c.length(); i++){ if(c.charAt(i) >= '0' && c.charAt(i) <= '9' ){ //替换 sb.append("number"); } else sb.append(c.charAt(i)); } String res = sb.toString(); System.out.print(res); } }