Java入門(String的3個演算法題)
題目一
將一個字串進行反轉,將字串中指定部分進行反轉
方式一
轉換為char[]
public class HelloWorld {
/*
講一個字串進行反轉,將字串中指定部分進行反轉
方式一:轉換為char[]
*/
public static void main(String[] args) {
HelloWorld temp = new HelloWorld();
String str = "hello world!";
String out = temp.reverse(str,2, 6);
System.out.println(out);
String s = temp.reverse(str);
System.out.println(s);
}
public String reverse(String str, int startIndex,int endIndex){
char[] arr = str.toCharArray();
for(int x = startIndex,y = endIndex;x<y;x++,y--){
char temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
return new String(arr);
}
public String reverse(String str){
char[] arr = str.toCharArray();
for(int x = 0,y = str.length()-1;x<y;x++,y--){
char temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
return new String(arr);
}
}
這裡提供兩個reverse()方法,兩個方法引數不同,屬於一個方法的過載。如果沒有指定startIndex和endIndex,那麼就把整體進行反轉;如果指定的話,就對指定的標號進行反轉。
當然也可以構造一個反轉的類,通過構造方法來進行不同引數的執行。
方式二
//方式二,使用string的拼接
public String reverse(String str, int startIndex,int endIndex){
String reverseStr = str.substring(0,startIndex);
for(int i = endIndex;i>= startIndex;i-- ){
reverseStr +=str.charAt(i);
}
reverseStr += str.substring(endIndex + 1);
return reverseStr;
}
//這裡僅列出第二個方法部分的程式碼,如果需要使用參照方式一
//中的完整程式碼進行替換即可
方式三
//方式三,使用StringBuffer/StringBuilder替換String
public String reverse(String str, int startIndex,int endIndex){
StringBuilder builder = new StringBuilder(str.length());
builder.append(str.substring(0,startIndex));
for(int i = endIndex;i>= startIndex;i--){
builder.append(str.charAt(i));
}
builder.append(str.substring(endIndex + 1));
return builder.toString();
}
題目二
獲取一個字串在另一個字串中出現的次數。
public class HelloWorld {
public static void main(String[] args) {
HelloWorld temp = new HelloWorld();
String mainStr = "abdjkfabdfabdjkfba";
String subStr = "ab";
int count = temp.getCount(mainStr, subStr);
System.out.println(count);
}
/**
* 獲取subStr在mainStr中出現的次數
* @param mainStr---目標字串
* @param subStr---子字串
* @return 次數
*/
public int getCount(String mainStr,String subStr){
int mainLength = mainStr.length();
int subLength = subStr.length();
int index;
int count = 0;
if(mainLength >= subLength){
while((index = mainStr.indexOf(subStr))!= -1){
count++;
mainStr = mainStr.substring(index + subStr.length());
}
return count;
}
return 0;
}
}
由於 mainStr= mainStr.substring(index + subStr.length());每次都要重新造一個,因此效率會降低。
因此提出一種改進的方法。
public class HelloWorld {
public static void main(String[] args) {
HelloWorld temp = new HelloWorld();
String mainStr = "abdjkfabdfabdjkfba";
String subStr = "ab";
int count = temp.getCount(mainStr, subStr);
System.out.println(count);
}
/**
* 獲取subStr在mainStr中出現的次數
* @param mainStr---目標字串
* @param subStr---子字串
* @return 次數
*/
public int getCount(String mainStr,String subStr){
int mainLength = mainStr.length();
int subLength = subStr.length();
int index = 0;
int count = 0;
if(mainLength >= subLength){
while((index = mainStr.indexOf(subStr,index))!= -1){
count++;
index += subLength;
}
return count;
}
return 0;
}
}
題目三
獲取個字串中最大相同子串
//這裡假設只有一個最大相同字串(即str1中的子串在str2中僅有一種情況)
public class HelloWorld {
public static void main(String[] args) {
HelloWorld temp = new HelloWorld();
String str1 = "fjdkhellofjkd";
String str2 = "hello";
String str = temp.getMaxSameString(str1,str2);
System.out.println(str);
}
public String getMaxSameString(String str1, String str2){
String maxStr = (str1.length() >= str2.length()) ? str1 : str2;
String minStr = (str1.length() < str2.length()) ? str1 : str2;
int length = minStr.length();
for(int i = 0;i < length;i++){
for(int x = 0,y = length-i;y <= length;x++,y++){
String subStr = minStr.substring(x,y);
if(maxStr.contains(subStr)){
return subStr;
}
}
}
return null;
}
}
那麼如果是不止一個最大子串呢?在沒有學習集合之前,可以這樣處理。
import java.util.Arrays;
public class HelloWorld {
public static void main(String[] args) {
HelloWorld temp = new HelloWorld();
String str1 = "fjdkhellofjkdworld";
String str2 = "helloworld";
String[] out = temp.getMaxSameString(str1,str2);
System.out.println(Arrays.toString(out));
}
public String[] getMaxSameString(String str1, String str2) {
StringBuffer sBuffer = new StringBuffer();
String maxStr = (str1.length() >= str2.length()) ? str1 : str2;
String minStr = (str1.length() < str2.length()) ? str1 : str2;
int length = minStr.length();
for (int i = 0; i < length; i++) {
for (int x = 0, y = length - i; y <= length; x++, y++) {
String subStr = minStr.substring(x, y);
if (maxStr.contains(subStr)) {
sBuffer.append(subStr + ",");
}
}
if (sBuffer.length() != 0) {
break;
}
}
String[] out = sBuffer.toString().replaceAll(",$", " ").split("\\,");
return out;
}
}
// 返回結果為:
// [hello, world ]
相關文章
- 3. 入門並實踐STL——string篇
- Java入門簡述(3)Java
- Java入門系列-13-String 和 StringBufferJava
- 奇偶個數(Java入門)Java
- JAVA面試題 String s = new String("xyz");產生了幾個物件?Java面試題物件
- Java String面試題Java面試題
- Java入門:水仙花演算法Java演算法
- Java中關於String型別的10個問題Java型別
- Java在演算法題中的輸入問題Java演算法
- Redis in .NET Core 入門:(2) StringRedis
- java 入門篇 問題集錦Java
- 演算法入門題:如何反轉一個單向連結串列?演算法
- 15個關於HTML的入門問題HTML
- XML入門常見問題(3)(轉)XML
- java String類練習題Java
- VC入門寶典三(String) (轉)
- Java多型的一個簡單入門的例子Java多型
- Java學習從入門到精通(3)(轉)Java
- 資料結構與演算法入門題資料結構演算法
- 雲伺服器入門須知的3個技巧伺服器
- 好程式設計師Java教程分享Java中String型別的10個問題程式設計師Java型別
- 程式設計師筆記|3個問題帶你入門資料建模程式設計師筆記
- Docker入門-構建第一個Java程式DockerJava
- 《Java從入門到失業》第四章:類和物件(4.2):String類Java物件
- java如何入門Java
- JAVA入門程式Java
- Java新手入門必須知道的30個基本概念Java
- Java演算法面試題(007) 蒙提霍爾問題(三門問題)Java演算法面試題
- SDL3 入門(2):第一個視窗
- java分散式(java入門)Java分散式
- J2SE入門(三) String深度解析
- 【入門】統計每個月兔子的總數 - 題解
- Proto3入門
- Weex入門(3)建立
- Julia快速入門(3)
- 24、jdbc入門3JDBC
- Vue 3入門指南Vue
- java中的StringJava