「剑指Offer」Day03:字符串(简单)
剑指 Offer 05. 替换空格
题目描述
请实现一个函数,把字符串s中的每个空格替换成"%20"。
输入:s = "We are happy."
输出:"We%20are%20happy."
思路
遍历字符串,遇到空格就进行替换,
- 可以比较空格的ASCII码,空格的ASCII码为32
-
或使用equals比较空字符串,
" ".equals(String.valueOf(s.charAt(i)))
- 也可以直接s.charAt(i) == ' ',但需注意空字符不是两个单引号就行了,里面还是要加一个空格的
实现代码
class Solution { public String replaceSpace(String s) { if(s == null || s.length() == 0){ return s; } StringBuilder sbr = new StringBuilder(); for(int i = 0; i < s.length(); i++){ char c = s.charAt(i); if(c == ' '){ sbr.append("%20"); }else{ sbr.append(String.valueOf(c)); } } return sbr.toString(); } }
剑指 Offer 58 - II. 左旋转字符串
题目描述
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。
输入: s = "abcdefg", k = 2
输出: "cdefgab"
方法一:调用截取函数
使用函数substring()截取字符串,分为左右两部分,右在前,左在后进行拼接
class Solution { public String reverseLeftWords(String s, int n) { String strL = s.substring(0, n); //截取前n个字符 String strR = s.substring(n, s.length()); //截取剩下的字符串 return strR + strL; //右在前,左在后进行拼接 } }
方法二:遍历拼接
遍历拼接,先从第n+1个字符拼接到字符串末尾,再从第一个字符拼接到第n个字符class Solution { public String reverseLeftWords(String s, int n) { StringBuilder sbr = new StringBuilder(); for(int i = n; i < s.length(); i++){ sbr.append(s.charAt(i)); } for(int i = 0; i < n; i++){ sbr.append(s.charAt(i)); } return sbr.toString(); } }优化:通过取余操作,优化代码
class Solution { public String reverseLeftWords(String s, int n) { StringBuilder sbr = new StringBuilder(); for(int i = n; i < n+s.length(); i++){ sbr.append(s.charAt(i % s.length())); //通过取余操作优化代码 } return sbr.toString(); } }