You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
android-notes/blogs/Algorithm/剑指 Offer/字符串相关.md

132 lines
3.3 KiB

---
字符串相关
---
[05. 替换空格](https://leetcode-cn.com/problems/ti-huan-kong-ge-lcof/)
```java
class Solution {
public String replaceSpace(String s) {
StringBuilder builder = new StringBuilder();
int i = 0;
while (i < s.length()) {
char c = s.charAt(i);
if (c == ' ') {
builder.append("%20");
} else {
builder.append(c);
}
i++;
}
return builder.toString();
}
}
```
[50. 第一个只出现一次的字符](https://leetcode-cn.com/problems/di-yi-ge-zhi-chu-xian-yi-ci-de-zi-fu-lcof/)
```java
class Solution {
public char firstUniqChar(String s) {
if (s.length() == 0) {
return ' ';
}
LinkedHashMap<Character, Integer> map = new LinkedHashMap<>();
for (char c : s.toCharArray()) {
map.put(c, map.getOrDefault(c, 0) + 1);
}
for (Map.Entry<Character, Integer> entry : map.entrySet()) {
if (entry.getValue() == 1) {
return entry.getKey();
}
}
return ' ';
}
}
```
```java
class Solution {
public char firstUniqChar(String s) {
char[] array = s.toCharArray();
int[] ints = new int[256];
for (char c : array) {
ints[c]++;
}
for (char c : array) {
if (ints[c] == 1) {
return c;
}
}
return ' ';
}
}
```
[58 - II. 左旋转字符串](https://leetcode-cn.com/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof/)
```java
class Solution {
public String reverseLeftWords(String s, int n) {
return s.substring(n) + s.substring(0, n);
}
}
```
[Offer 58 - I. 翻转单词顺序](https://leetcode-cn.com/problems/fan-zhuan-dan-ci-shun-xu-lcof/)
```java
class Solution {
public String reverseWords(String s) {
String[] strings = s.trim().split(" ");
StringBuilder sb = new StringBuilder();
for (int i = strings.length - 1; i >= 0; i--) {
if (strings[i].equals("")) {
continue;
}
sb.append(strings[i]).append(" ");
}
return sb.toString().trim();
}
}
```
4 years ago
[67. 把字符串转换成整数](https://leetcode-cn.com/problems/ba-zi-fu-chuan-zhuan-huan-cheng-zheng-shu-lcof/)
```java
class Solution {
public int strToInt(String str) {
str = str.trim();
if (str.length() == 0) {
return 0;
}
boolean isMinus = false;
char[] ch = str.toCharArray();
if (ch[0] == '+' || ch[0] == '-' || Character.isDigit(ch[0])) {
if (ch[0] == '+' || ch[0] == '-') {
if (ch[0] == '-') {
isMinus = true;
}
ch = Arrays.copyOfRange(ch, 1, ch.length);
}
int index = 0;
long res = 0;
while (index < ch.length && Character.isDigit(ch[index])) {
res *= 10;
res += ch[index] - '0';
if (res > Integer.MAX_VALUE) {
return isMinus ? Integer.MIN_VALUE : Integer.MAX_VALUE;
}
index++;
}
return isMinus ? -(int) res : (int) res;
}
return 0;
}
}
```