案例一:子串問題 kmp
private
static
void
example1()
private
static
intjudgestrcontainssub(string str, string sub) else
} if (j > subchar.length - 1)
return0;}
private
static
int next(char subchar) else
} return next;
}
案例二:旋轉詞eg:1234 的旋轉詞:1234、2341、3412、4123解決:將1234 拼接 12341234,子串(用kmp)就是旋轉詞
private
static
void
example2() else
}
案例三:dog loves cat —-> cat loves dog思路:將所有逆序: tac sevol god,再將每個單詞逆序
private
static
void
example3() else
s = d + 1;
} system.out.println(reverse1);
}private
static string reversestr(string reversesource, int s, int d)
stringbuilder sb = new stringbuilder();
for (char c : ch)
return sb.tostring();
}
案例四:o(n)
private
static
void
example4()
案例五:o(n*logn)思路:str1 + str2 < str2 + str1,則是str1放在前面。
private
static
void
example5() ;
string str2 = ;
system.out.println(findsmallest(str1, str1.length));
system.out.println(findsmallest(str2, str2.length));
}private
static string findsmallest(string str, int length)
arrays.sort(str, new comparator()
});stringbuilder stitch = new stringbuilder();
for (string s : str)
return stitch.tostring();
}
案例六:將空格替換成%20從後往前
private
static
void
example6()
char chs = new
char[str.length() + count * (repl.length() - 1)];
int i = str.length() - 1, j = repl.length() - 1, k = chs.length - 1;
while(i >= 0) else
j = repl.length() - 1;
}i --;
} for (char c : chs)
}
案例七:最長無重複子串思路:需要乙個set,從左往右遍歷字串,如果不包含,新增到set、並計算現在的子串長度如果包含,就移除到出現這個字元之後的位置。思路:
字串操作 靠字串分割字串
字串分解函式。注意strtok比較複雜。要妥善運用!也可以不用strtok函式,但要實現字串靠字串分割比較困難!注意str指向的空間必須是可讀可寫的 如陣列或動態分配的空間 不能為字串常量的指標,因為strtok改變了其中的內容。include include 功能 將str中的字串按照elemon...
字串操作
字串操作 要了解字串操作首先要了解什麼是字串。前面已經提過,字串是乙個由零個或者多個字元組成的有限序列,既然是有限的那麼也就意味著字串存在乙個起始位置和乙個結束位置。我們以指定起始位置的方式來通知程式從該位置起向後的一段記憶體空間的內容應該解釋為字串。那麼這個字串在什麼地方結束呢?規定當遇到字元 0...
字串操作
include using namespace std int strlength char str char strcopy char str1,char str2 char strlink char str1,char str2 int main char strcopy char str1,c...