1. 程式人生 > 其它 >【Java】——字串相關題目

【Java】——字串相關題目

技術標籤:Javajava字串leetcodestring

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.題目描述——檢查兩個字串陣列是否相等。

給你兩個字串陣列word1word2。如果兩個陣列表示的字串相同,返回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;
    }
}