【Java】——字串相關題目
阿新 • • 發佈:2021-01-21
1.題目描述:——翻轉字串
給一個字元型別的陣列chas和一個整數size,請把大小為size的左半區整體右移到右半區,右半區整體移動到左邊。
package demo1; import java.util.*; //逆置字串 public class Test2 { public static void main(String[] args){ Scanner sc = new Scanner(System.in); int k = sc.nextInt(); String str = sc.next(); String ret = reverseK(str,k); System.out.println(ret); } public static String reverse(String str,int start,int end) { char[] ch = str.toCharArray(); while (start < end) { char tmp = ch[start]; ch[start] = ch[end]; ch[end] = tmp; start++; end--; } return String.valueOf(ch); } public static String reverseK (String str,int k){ if (str == null || k <= 0 || k > str.length()) { return null; } str = reverse(str, 0, k - 1); str = reverse(str, k , str.length() - 1); str = reverse(str, 0, str.length() - 1); return str; } }
執行截圖:
2.題目描述:——檢查兩個字串陣列是否相等。
給你兩個字串陣列word1
和word2
。如果兩個陣列表示的字串相同,返回true
;否則,返回false
public class Test3 { public static void main(String[] args) { String[] str1 = {"ab", "c"}; String[] str2 = {"abc"}; System.out.println(arrayStringsAreEqual(str1, str2)); } public static boolean arrayStringsAreEqual(String[] word1, String[] word2) { String str1 = ""; String str2 = ""; for (int i = 0; i < word1.length ; i++) { str1 += word1[i]; } for(int j = 0;j < word2.length;j++){ str2 += word2[j]; } return str1.equals(str2); } }
3.題目描述:
統計字串中的單詞個數,這裡的單詞指的是連續的不是空格的字元。
public class Test4 { public static void main(String[] args) { String str = "hello haha hahhdid hags"; int ret = countSegments(str); System.out.println(ret); } public static int countSegments(String s) { s = s.trim();//去掉字串左右的空格; String[] arr = s.split(" "); int len = 0; for(String str :arr){ if(str.equals(" ") || str.isEmpty()){ continue; } len ++; } return len; } }
4.題目描述:——替換所有問號
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/replace-all-s-to-avoid-consecutive-repeating-characters
給一個僅包含小寫英文字母和 '?' 字元的字串 s,請將所有的 '?' 轉換為若干小寫字母,使最終的字串不包含任何 連續重複 的字元。
注意:不能 修改非 '?' 字元。
輸入:s = "?zs"
輸出:"azs"
解釋:該示例共有 25 種解決方案,從 "azs" 到 "yzs" 都是符合題目要求的。只有 "z" 是無效的修改,因為字串 "zzs" 中有連續重複的兩個 'z' 。
//問號替換
public class Test5 {
public static void main(String[] args) {
String str = "?abc";
System.out.println(modifyString(str));
}
public static String modifyString(String s) {
char[] ch = s.toCharArray();
for (int i = 0; i < ch.length; i++) {
if (ch[i] == '?') {
char ahead = ( i == 0 ? ' ' : ch[i - 1] );
char behind =( i == ch.length - 1 ? ' ' : ch[i + 1] );
char tmp = 'a';
while (tmp == ahead || tmp == behind) {
tmp++;
}
ch[i] = tmp;
}
}
return new String(ch);
}
}
5.題目描述:——重複的子字串
給定一個非空的字串,判斷它是否可以由它的一個子串重複多次構成。給定的字串只含有小寫英文字母,並且長度不超過10000。
示例 1:
輸入: "abab" 輸出: True 解釋: 可由子字串 "ab" 重複兩次構成。
示例 2:
輸入: "aba" 輸出: False
具體實現:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
System.out.println(repeatedSubstringPattern1(str));
}
//方法1:
public static boolean repeatedSubstringPattern1(String s) {
String str = s + s;
return str.substring(1, str.length() - 1).contains(s);
}
//方法2:
public static boolean repeatedSubstringPattern2(String s) {
return (s + s).substring(1,2 * s.length() - 1).indexOf(s) != -1;
}
6.題目描述:——轉成小寫字母
實現函式 ToLowerCase(),該函式接收一個字串引數 str,並將該字串中的大寫字母轉換成小寫字母,之後返回新的字串。
public class Test2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
System.out.println(toLowerCase(str));
}
public static String toLowerCase(String str) {
String ret = "";
for(int i = 0;i < str.length();i++){
char c = str.charAt(i);
if(c >= 65 && c <= 90){
c += 32;
}
ret += c;
}
return ret;
}
}