class Solution {
public void reverseString(char[] s) {
int left = 0, right = s.length - 1;
while (left < right) {
char temp = s[right];
s[right] = s[left];
s[left] = temp;
right--;
left++;
}
}
}
字符串与字符数组转换次数不要超过1次 会出现错误 卡了一下
class Solution {
public String reverseStr(String s, int k) {
int len = s.length();
int l = 0, r = 0;
char[] ss = s.toCharArray();
while (true) {
if (r + k * 2 < len) {
r += k * 2;
} else {
r = len - 1;
}
int left = l, right = Math.min(r,l + k - 1);
while (left < right) {
char temp = ss[right];
ss[right] = ss[left];
ss[left] = temp;
left++;
right--;
}
l += 2 * k;
if(r == len - 1){
break;
}
}
return new String(ss);
}
}
class Solution {
public String replaceSpace(String s) {
int t = 0;
StringBuilder ans = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == ' ') {
ans.append("%20");
}else{
ans.append(s.charAt(i));
}
}
return ans.toString();
}
}
用正则表达式去除多余空格
class Solution {
public String reverseWords(String s) {
s = s.trim();
String[] ss = s.split("\\s+");
int len = ss.length;
StringBuffer stringBuffer = new StringBuffer();
for (int i = len-1; i >=0; i--) {
if (i != len-1 ) {
stringBuffer.append(" ");
}
stringBuffer.append(ss[i]);
}
return stringBuffer.toString();
}
}
class Solution {
public String reverseLeftWords(String s, int n) {
String ans = s.substring(n,s.length());
ans += s.substring(0,n);
return ans;
}
}
KMP算法
class Solution {
public void getNext(int[] next, String s) {
int j = -1;
next[0] = j;
for (int i = 1; i < s.length(); i++) {
while (j >= 0 && s.charAt(i) != s.charAt(j+1)) {
j = next[j];
}
if (s.charAt(i) == s.charAt(j + 1)) {
j++;
}
next[i] = j;
}
}
public int strStr(String haystack, String needle) {
if (needle.length() == 0) {
return 0;
}
int[] next = new int[needle.length()];
getNext(next, needle);
int j = -1;
for (int i = 0; i < haystack.length(); i++) {
while (j >= 0 && haystack.charAt(i) != needle.charAt(j+1)) {
j = next[j];
}
if (haystack.charAt(i) == needle.charAt(j + 1)) {
j++;
}
//匹配到第一个完整的needle就退出
if (j == needle.length() - 1) {
return (i - needle.length() + 1);
}
}
return -1;
}
}
class Solution {
public boolean repeatedSubstringPattern(String s) {
if (s.equals("")) {
return false;
}
int j = -1;
int len = s.length();
int[] next = new int[len];
next[0] = j;
for (int i = 1; i < len; i++) {
while (j >= 0 && s.charAt(i) != s.charAt(j + 1)) {
j = next[j];
}
if (s.charAt(i) == s.charAt(j + 1)) {
j++;
}
next[i] = j;
}
System.out.println(Arrays.toString(next));
if (next[len - 1] >= 0 && len % (len - next[len - 1] - 1) == 0) {
return true;
}
return false;
}
}
字符串结束